Mục lục:

Dải LED WiFi + Cảm biến nhiệt độ với ESP8266: 6 bước
Dải LED WiFi + Cảm biến nhiệt độ với ESP8266: 6 bước

Video: Dải LED WiFi + Cảm biến nhiệt độ với ESP8266: 6 bước

Video: Dải LED WiFi + Cảm biến nhiệt độ với ESP8266: 6 bước
Video: Lập trình esp8266 - Bài 3 - Giám sát nhiệt độ và độ ẩm cảnh báo từ xa qua điện thoại dùng blynk iot 2024, Tháng mười một
Anonim
Dải LED WiFi + Cảm biến nhiệt độ với ESP8266
Dải LED WiFi + Cảm biến nhiệt độ với ESP8266

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

Kết nối các thành phần phần cứng
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 ý:

  1. 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ỹ.
  2. 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.
  3. 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à:

  1. Thêm người dùng của bạn vào nhóm quay số:

    sudo adduser $ (whoami) quay số

  2. 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: