Mục lục:
- Bước 1: Tạo môi trường xây dựng
- Bước 2: Lấy mã nguồn, định cấu hình và xây dựng
- Bước 3: Kết nối các thành phần phần cứng
- Bước 4: Flash và chạy
- Bước 5: Tương tác
- Bước 6: Chi tiết triển khai
Video: Dải LED WiFi + Cảm biến nhiệt độ với ESP8266: 6 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Hướng dẫn này mô tả các bước để thiết lập ESP8266 và làm cho nó kết nối với cả cảm biến nhiệt độ và dải đèn LED, đồng thời có thể nhận đầu vào và gửi đầu ra với MQTT qua WiFi. Dự án được thực hiện cho một khóa học được thực hiện tại Cal Poly San Luis Obispo vào mùa thu năm 2016- CPE 439: Hệ thống nhúng thời gian thực. Mục tiêu chung là chứng minh sự dễ dàng trong việc tạo ra một "thứ" được kết nối internet với phần cứng rẻ tiền.
Nguồn cung cấp / Thiết bị Yêu cầu:
- Bảng phát triển NodeMCU ESP8266
- Dải đèn LED WS2812B
- Cảm biến nhiệt độ MAX31820
- Breadboard
- Điện trở 4,7K ohm
- Điện trở 220 ohm
- dây nhảy
- cáp micro-usb
- PC (hoặc VM) chạy linux (ví dụ: Ubuntu)
Giả định / Điều kiện tiên quyết:
- kinh nghiệm sử dụng các công cụ dòng lệnh và cài đặt các gói trên bản phân phối dựa trên debian
- hiểu cơ bản về cú pháp Makefile
- kết nối dây
Bước 1: Tạo môi trường xây dựng
Để xây dựng dự án, bạn sẽ cần cài đặt esp-open-sdk trên máy của mình. Theo liên kết và đọc hướng dẫn xây dựng. Tóm lại, bạn sẽ thực hiện một số lệnh sudo apt-get để cài đặt các phụ thuộc, một bản sao git --recursive để sao chép / tải xuống esp-open-sdk và cuối cùng là một lệnh thực hiện để xây dựng esp-open-sdk.
Nhìn tôi
Bước 2: Lấy mã nguồn, định cấu hình và xây dựng
Bây giờ esp-open-sdk đã được xây dựng, hãy sao chép kho dự án.
git clone
Thay đổi vào thư mục dự án, tạo thư mục.local và sao chép cài đặt ví dụ.
cd esp-rtos-tests
mkdir -p.local cp settings.example.mk.local / settings.mk
Bây giờ, hãy mở.local / settings.mk bằng bất kỳ trình soạn thảo văn bản nào và thay đổi các cài đặt sau:
- OPENSDK_ROOT: Đường dẫn tuyệt đối cho vị trí của esp-open-sdk bạn đã tạo ở bước 1
- WIFI_SSID: SSID của mạng WiFi của bạn
- WIFI_PASS: Mật khẩu của mạng WiFi của bạn
- PIXEL_COUNT: Số pixel trên dải LED WS2812B của bạn
Lưu ý: Vì dự án này sử dụng SPI để điều khiển các đèn LED và sử dụng NodeMCU 3.3v để cung cấp cho chúng, bạn có thể sẽ không thể điều khiển nhiều hơn ~ 60 đèn LED.
Lưu ý: Các cài đặt khác không cần thay đổi, nhưng có thể thay đổi nếu muốn. Nên giữ thứ tự ưu tiên của nhiệm vụ. Số ưu tiên càng thấp thì mức độ ưu tiên của nhiệm vụ càng thấp.
Bây giờ xây dựng dự án:
làm ví dụ -C / cpe439
Nếu mọi thứ được thiết lập chính xác, nó sẽ bắt đầu biên dịch. Cuối cùng, bạn sẽ thấy:
Đã tạo thành công 'firmware / cpe439.bin'
Nhìn tôi
Bước 3: Kết nối các thành phần phần cứng
Bây giờ mã đã được biên dịch, đã đến lúc kết nối các thiết bị ngoại vi của chúng ta.
Đầu tiên, dán NodeMCU vào breadboard, sau đó sử dụng dây jumper để tạo các kết nối như trong sơ đồ.
Một số điều cần lưu ý:
- Quan trọng: Đường dữ liệu WS2812B không phải là hai hướng. Nếu bạn nhìn kỹ vào các dấu hiệu trên mặt LED của dải, bạn sẽ thấy các mũi tên nhỏ chỉ về một hướng. Đầu ra từ D7 của NodeMCU cần phải hướng vào WS2812B giống như cách đánh dấu hướng, bạn có thể thấy trong biểu đồ nếu bạn nhìn kỹ.
- Tùy thuộc vào loại kết nối mà WS2812B của bạn đi kèm, bạn có thể cần thực hiện một số sửa đổi để làm cho chúng kết nối an toàn vào breadboard. Bạn cũng có thể sử dụng kẹp cá sấu để kết nối chúng với cáp jumper có thể breadboard.
- Các chân MAX31820 có độ cao nhỏ hơn và mỏng hơn so với dây nhảy tiêu chuẩn 0,1 "/ 2,54mm, làm cho chúng khó kết nối. Một cách để giải quyết vấn đề này là sử dụng dây nhảy từ nữ sang nam, tháo vỏ nhựa từ phía nữ, sau đó sử dụng một số kìm để uốn các đầu jumper nữ chặt chẽ xung quanh các chân MAX31820 nhỏ hơn.
Kiểm tra kỹ các kết nối trước khi cấp nguồn cho NodeMCU để không làm hỏng các thành phần.
Bước 4: Flash và chạy
Nhấp nháy
Với tất cả phần cứng được kết nối, hãy cắm NodeMCU của bạn và nhấp nháy bằng lệnh sau:
làm ví dụ flash -C / cpe439 ESPPORT = / dev / ttyUSB0
/ dev / ttyUSB0 là com nối tiếp mà NodeMCU sẽ hiển thị bên dưới. Nếu bạn có các thiết bị nối tiếp khác được kết nối, nó có thể hiển thị dưới dạng / dev / ttyUSB1 hoặc một số số khác. Để kiểm tra, bạn có thể chạy lệnh này hai lần, một lần khi đã rút NodeMCU và một lần khi đã cắm vào và so sánh sự khác biệt:
ls / dev / ttyUSB *
Một vấn đề khác mà bạn có thể gặp phải là không có quyền truy cập vào thiết bị. Hai cách để khắc phục điều này là:
-
Thêm người dùng của bạn vào nhóm quay số:
sudo adduser $ (whoami) quay số
- chmod hoặc cắt nhỏ thiết bị:
sudo chmod 666 / dev / ttyUSB0 sudo chown $ (whoami): $ (whoami) / dev / ttyUSB0Phương pháp đầu tiên được ưu tiên vì nó là một giải pháp lâu dài.
Đang chạy
Sau khi chạy lệnh flash thành công, thiết bị sẽ ngay lập tức khởi động và bắt đầu chạy mã đã biên dịch. Tại bất kỳ thời điểm nào sau khi nhấp nháy, bạn có thể chạy lệnh sau để xem đầu ra nối tiếp:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q
Để tiết kiệm thời gian, bạn có thể thêm tệp này vào tệp ~ /.bashrc của mình:
bí danh gật đầu = 'python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 / dev / ttyUSB0 500000 --raw -q'
.. mà cho phép bạn chỉ cần gõ "gật đầu" làm bí danh cho lệnh đó.
Nếu mọi thứ được định cấu hình chính xác, dải đèn LED của bạn sẽ sáng lên màu xanh lục và trên nối tiếp, bạn sẽ thấy kết nối WiFi, nhận địa chỉ IP, kết nối với MQTT và thông báo rằng dữ liệu nhiệt độ đang được đẩy ra.
được kết nối với MyWiFiSSID, bắt đầu ứng dụng khách kênh 1dhcp… wifi_task: status = 1wifi_task: status = 1ip: 192.168.2.23, mask: 255.255.255.0, gw: 192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueueReceive + 25.43xWittueFitask: (Lại) kết nối với máy chủ MQTT test.mosquitto.org… xQueueReceive + 25.50xQueueSend ok doneGửi kết nối MQTT… MQTTv311donexQueueReceive +25.56 xQueueSend ok
Bước 5: Tương tác
Giả sử thiết bị của bạn đã kết nối thành công với WiFi và nhà môi giới MQTT, bạn sẽ có thể gửi và nhận dữ liệu từ NodeMCU với MQTT. Nếu bạn chưa có, hãy cài đặt gói ứng dụng khách mosquitto:
sudo apt-get install mosquitto-client
Bây giờ bạn có thể sử dụng các chương trình mosquitto_pub và mosquitto_sub từ trình bao của mình.
Nhận cập nhật nhiệt độ
Để nhận dữ liệu nhiệt độ, chúng tôi sẽ sử dụng lệnh mosquitto_sub để đăng ký chủ đề mà NodeMCU đang xuất bản.
mosquitto_sub -h test.mosquitto.org -t / cpe439 / temp
Bạn sẽ thấy dữ liệu nhiệt độ (tính bằng độ C), khi đến thiết bị đầu cuối.
+25.87+25.93+25.68…
Đặt màu dải đèn LED từ xa
Một định dạng thông báo đơn giản được sử dụng để gửi các giá trị RGB tới NodeMCU qua MQTT. Định dạng lệnh trông như thế này:
r: RRRg: GGGb: BBB ~
Trong đó RRR, GGG, BBB tương ứng với các giá trị RGB (0-255) của màu bạn muốn gửi. Để gửi lệnh của chúng tôi, chúng tôi sẽ sử dụng lệnh mosquitto_pub. Dưới đây là một số ví dụ:
mosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 255g: 0b: 0 ~' # redmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m 'r: 0g: 255b: 0 ~ '# greenmosquitto_pub -h test.mosquitto.org -t / cpe439 / rgb -m' r: 0g: 0b: 255 ~ '# blue
Nếu bạn muốn sáng tạo, hãy tìm một công cụ chọn màu trực tuyến như công cụ này và chỉnh sửa lệnh với bất kỳ giá trị RGB nào bạn chọn.
Coi chừng
Các chủ đề trong dự án này được đặt thành / cpe439 / rgb và / cpe439 / temp trên một nhà môi giới MQTT công khai, có nghĩa là không có gì ngăn cản người khác xuất bản hoặc đăng ký các chủ đề tương tự như bạn. Để thử mọi thứ, sử dụng nhà môi giới công khai là tốt, nhưng đối với các dự án nghiêm trọng hơn, bạn sẽ muốn kết nối với nhà môi giới có bảo vệ bằng mật khẩu hoặc chạy nhà môi giới của riêng bạn trên máy chủ.
Bước 6: Chi tiết triển khai
Onewire
ESP8266 chỉ có 1 lõi, quá lâu, việc chặn các tác vụ như chờ 750ms để cảm biến nhiệt độ thực hiện phép đo nhiệt độ thường sẽ dẫn đến WiFi không hoạt động tốt và thậm chí có thể bị lỗi. Trong mô hình FreeRTOS, bạn gọi vTaskDelay () để xử lý các lần đợi dài này, nhưng cũng có nhiều thời gian chờ ngắn hơn cần thiết giữa các lần đọc và ghi ngắn hơn so với đánh dấu hệ thống FreeRTOS, và do đó không thể tránh khỏi với vTaskDelay (). Để giải quyết vấn đề này, trình điều khiển onewire trong dự án này được viết để chạy khỏi máy trạng thái được điều khiển bởi bộ đếm thời gian phần cứng của ESP8266, có thể kích hoạt các sự kiện ở mức thấp nhất là 10 micro giây một lần, đây là thời gian ngắn nhất thời gian cần thiết giữa các hoạt động đọc / ghi một dây. Hầu hết các triển khai khác sử dụng lệnh gọi chặn tới delay_us () hoặc tương tự để xử lý điều này, nhưng nếu bạn liên tục cập nhật nhiệt độ, tất cả các độ trễ đó bắt đầu cộng dồn, dẫn đến ứng dụng kém phản hồi hơn. Nguồn cho phần mã này nằm trong thư mục extras / onewire.
WS2812B
ESP8266 không có bất kỳ tùy chọn phần cứng tiêu chuẩn nào cho PWM đủ nhanh để điều khiển dải LED ở 800KHz. Để giải quyết vấn đề này, dự án này sử dụng chân SPI MOSI để điều khiển các đèn LED. Bằng cách điều chỉnh tốc độ xung nhịp của SPI và thay đổi trọng tải SPI xung quanh, bạn có thể đạt được khả năng kiểm soát khá đáng tin cậy đối với từng đèn LED riêng lẻ. Phương pháp này không phải là không có sai sót - đối với một đèn LED phải được cấp nguồn bằng nguồn 5V và bộ chuyển mức nên được thêm vào đầu ra của chân SPI. Nhưng 3.3V không hoạt động. Thứ hai, có những trục trặc xảy ra do thời gian sử dụng phương pháp SPI không hoàn hảo. Và thứ ba là bây giờ bạn không thể sử dụng SPI cho bất cứ điều gì khác. Thông tin cơ bản bổ sung về phương pháp này có thể được tìm thấy tại đây và nguồn cho phần mã này nằm trong thư mục extras / ws2812.
Một phương pháp đáng tin cậy hơn để điều khiển dải đèn LED là sử dụng i2s. Tuy nhiên, phương pháp này có rất nhiều cách hack dành riêng cho chip, vì vậy SPI dường như là một lựa chọn tốt hơn như một bài tập học tập.
Đề xuất:
Bắt đầu với cảm biến nhiệt độ và rung không dây phạm vi dài: 7 bước
Bắt đầu với cảm biến nhiệt độ và rung động không dây phạm vi dài: Đôi khi rung động là nguyên nhân gây ra các vấn đề nghiêm trọng trong nhiều ứng dụng. Từ trục máy và ổ trục đến hiệu suất của đĩa cứng, rung động gây ra hư hỏng máy, thay thế sớm, hiệu suất thấp và gây ảnh hưởng lớn đến độ chính xác. Giám sát
Giao diện Arduino với cảm biến siêu âm và cảm biến nhiệt độ không tiếp xúc: 8 bước
Giao diện Arduino với cảm biến siêu âm và cảm biến nhiệt độ không tiếp xúc: Ngày nay, các nhà sản xuất, nhà phát triển đang ưa thích Arduino để phát triển nhanh chóng việc tạo mẫu của các dự án. Arduino là một nền tảng điện tử mã nguồn mở dựa trên phần cứng và phần mềm dễ sử dụng. Arduino có cộng đồng người dùng rất tốt. Trong chương trình này
Cách sử dụng cảm biến nhiệt độ DHT11 với Arduino và nhiệt độ in Nhiệt độ và độ ẩm: 5 bước
Cách sử dụng cảm biến nhiệt độ DHT11 với Arduino và nhiệt độ in Nhiệt độ và độ ẩm: Cảm biến DHT11 được sử dụng để đo nhiệt độ và độ ẩm. Họ là những người rất ưa thích đồ điện tử. Cảm biến nhiệt độ và độ ẩm DHT11 giúp bạn thực sự dễ dàng thêm dữ liệu độ ẩm và nhiệt độ vào các dự án điện tử tự làm của mình. Đó là mỗi
Gửi dữ liệu cảm biến nhiệt độ và độ ẩm không dây dải dài IoT tới Google Trang tính: 39 bước
Gửi dữ liệu cảm biến nhiệt độ và độ ẩm không dây phạm vi dài của IoT tới Google Trang tính: Chúng tôi đang sử dụng cảm biến Nhiệt độ và độ ẩm ở đây của NCD, nhưng các bước vẫn như nhau đối với bất kỳ sản phẩm ncd nào, vì vậy nếu bạn có các cảm biến không dây ncd khác, hãy trải nghiệm miễn phí để quan sát cùng với bên cạnh đó. Bằng cách dừng lại của văn bản này, bạn cần phải
CẢM BIẾN SUHU DENGAN LCD DAN LED (Tạo cảm biến nhiệt độ với LCD và LED): 6 bước (có hình ảnh)
CẢM BIẾN SUHU DENGAN LCD DAN LED (Chế tạo cảm biến nhiệt độ với LCD và LED): hai, saya Devi Rivaldi mahasiswa UNIVERSITAS NUSA PUTRA dari Indonesia, di sini saya akan berbagi cara membuat sensor suhu menggunakan Arduino dengan Output ke LCD dan LED. Ini adalah pembaca suhu dengan desain saya sendiri, dengan sensor ini anda