Mục lục:

Cờ hộp thư hỗ trợ MQTT và Wifi: 7 bước (có hình ảnh)
Cờ hộp thư hỗ trợ MQTT và Wifi: 7 bước (có hình ảnh)

Video: Cờ hộp thư hỗ trợ MQTT và Wifi: 7 bước (có hình ảnh)

Video: Cờ hộp thư hỗ trợ MQTT và Wifi: 7 bước (có hình ảnh)
Video: Thiết lập MQTT Kết Nối Data Trên Server Trong 35 Phút | 21 Ngày Trở Thành Chiến Binh IoT ( Ngày 16) 2024, Tháng bảy
Anonim
Cờ hộp thư hỗ trợ MQTT và Wi-Fi
Cờ hộp thư hỗ trợ MQTT và Wi-Fi

Lưu ý: được cập nhật với chương trình cơ sở mới, sơ đồ và mẹo dành cho lập trình viên

Một vài năm, tôi bắt tay vào dự án tự động hóa ngôi nhà của riêng mình. Nó bắt đầu bằng cách xây dựng bản dựng máy phát 433 MHz được điều khiển bởi máy chủ với Arduino để chuyển đổi rất nhiều thiết bị chuyển mạch từ xa dựa trên PT2262 giá rẻ. Sau đó, tôi đã thêm một bộ thu dựa trên Arduino cho trạm thời tiết của mình, nối tiếp điểm điều khiển của bộ sạc EV của tôi, vân vân. Mọi thứ ngày càng trở nên đan xen hơn (và phức tạp!). Vì vậy, một vài tháng trước, tôi đã quyết định chuẩn hóa mọi thứ dựa trên MQTT để nhắn tin, Node-RED để tự động hóa (cả hai đều chạy trên một Raspberry Pi B +) và MariaDb để ghi nhật ký (chạy trên NAS Synology của tôi). Sau đó, tôi cũng đã chuyển nhà môi giới MQTT (Mosquitto) và Node-RED sang NAS..

Có thể hướng dẫn này mô tả một dự án ngớ ngẩn cho vui kết nối hộp thư gắn trên đường phố của tôi trong cơ sở hạ tầng gia đình này. Ý tưởng là nếu ai đó mở hộp thư gắn hàng rào cách cửa trước khoảng 10 mét, nó sẽ báo hiệu cho tôi trên điện thoại của tôi và có thể là các thiết bị khác.

Bước 1: Phác thảo, Điều kiện tiên quyết và các phần

Đề cương

Ở cấp độ cao, hộp thư khi được mở sẽ gửi một tin nhắn MQTT duy nhất đến nhà môi giới để những người đăng ký chủ đề đó sẽ được thông báo. Node-RED cũng đăng ký và thực hiện một số tự động hóa, trong trường hợp này là gửi email và / hoặc tin nhắn đẩy tới điện thoại của tôi.

Hộp thư phải chạy bằng pin và chạy trong ít nhất một năm và nên làm như vậy bằng cách sử dụng mạng WiFi của tôi. Vì việc đánh thức bộ điều khiển vi mô và kết nối với mạng WiFi có thể mất vài giây nên tôi không thể sử dụng công tắc kích hoạt để cắt nguồn. Thay vào đó, bộ xử lý phải được phép hoàn thành công việc của mình sau khi nắp hộp thư đã đóng lại.

Điều kiện tiên quyết

Tôi cho rằng bạn có kỹ năng hàn khiêm tốn, đã làm việc với Arduino IDE một chút và đã cài đặt bảng mạch ESP8266 bằng Trình quản lý bảng. Bạn cũng cần có bộ chuyển đổi nối tiếp USB 3,3 volt để lập trình bộ điều khiển vi mô.

Tôi cũng giả sử bạn có một nhà môi giới MQTT và một máy chủ Node-RED đang chạy. Nếu không, có rất nhiều hướng dẫn trên Internet, nhưng tôi khuyên bạn nên đi theo con đường lười biếng và sử dụng tập lệnh cài đặt tuyệt vời của Peter Scargill nếu bạn muốn chạy phần này trên bất kỳ Pi hoặc Ubuntu nào hoặc sử dụng hình ảnh của Andreas Spiess cho Pi Zero W (liên kết trong phần mô tả của video đó), điều này sẽ giúp bạn tiết kiệm vài giờ khi xem các tập lệnh cài đặt đang chạy. Ngoài ra, bạn có thể làm cho phần sụn gửi trực tiếp một email, nhưng bạn sẽ mất rất nhiều tính linh hoạt khi làm như vậy.

Các bộ phận

  • 1 hộp, 3 pin AA đã đóng
  • 2 pin AA
  • 1 mô-đun ESP8266. Đối với dự án này, tôi đã sử dụng ESP-01
  • 1 công tắc vi mô
  • 1 điện trở 47K
  • 1 điện trở 4M7
  • 1 tụ điện 2.2uF
  • 1 ống nhựa mỏng. Tôi đã sử dụng một cây bút
  • 1 que diêm hoặc kẹo que dày, dài. Nó phải dễ dàng phù hợp và di chuyển trong ống nhựa

Bước 2: Phần cứng: Hộp, Công tắc và Hệ thống dây điện

Phần cứng: Hộp, Công tắc và Hệ thống dây điện
Phần cứng: Hộp, Công tắc và Hệ thống dây điện
Phần cứng: Hộp, Công tắc và Hệ thống dây điện
Phần cứng: Hộp, Công tắc và Hệ thống dây điện
Phần cứng: Hộp, Công tắc và Hệ thống dây điện
Phần cứng: Hộp, Công tắc và Hệ thống dây điện

Tôi bắt đầu với một hộp pin cũ từ một món đồ trang trí Giáng sinh không còn tồn tại. Nó được thiết kế cho ba viên pin cỡ AA. Vì ESP8266 sẽ chạy tốt trên 3 volt, tôi có thể sử dụng hai pin và sử dụng vị trí thứ ba cho bộ điều khiển vi mô. Lưu ý rằng hộp có một ngăn phụ nhỏ mà tôi có thể sử dụng cho công tắc kích hoạt. Tôi đã sử dụng một loại công tắc rất phổ biến như trong hình, nhưng đã tháo lò xo chốt nó ở vị trí bật hoặc tắt. Tôi hàn hai sợi dây mỏng vào các điểm tiếp xúc NC và dán nó vào hộp bằng một giọt keo siêu nhỏ.

Tiếp theo, tôi khoan một lỗ trên nắp trên phù hợp với một ống nhựa lấy từ bút bi. Lỗ thẳng hàng chính xác với công tắc và dẫn hướng một pít tông làm từ que diêm dày.

Cuối cùng, tôi hàn thêm hai dây nữa vào các điểm tiếp xúc của pin và hướng dẫn tất cả bốn dây đến vị trí của pin thứ ba, nơi sắp đặt bộ điều khiển vi mô.

Bước 3: Phần cứng: ESP-01

Phần cứng: ESP-01
Phần cứng: ESP-01
Phần cứng: ESP-01
Phần cứng: ESP-01
Phần cứng: ESP-01
Phần cứng: ESP-01

Với yêu cầu WiFi, toàn bộ dự án hét lên ESP8266. Bộ điều khiển WiFi nhỏ này đã trở thành công cụ yêu thích của cộng đồng mày mò như một mô-đun có giá dưới 2,50 EUR và tích hợp một ngăn xếp WiFi và TCP / IP đầy đủ, với đủ dung lượng dự phòng để chạy các chương trình của riêng bạn. Arduino IDE (hoặc Atom với plugin PlatformIO) hỗ trợ đầy đủ ESP8266.

Tôi thường sử dụng một chiếc ESP-12F, nhưng tôi có một bảng ESP-01 nhỏ đặt xung quanh, rất phù hợp cho công việc và vừa vặn trong hộp pin. Vấn đề duy nhất là việc flash firmware trong ESP-01 khá phức tạp. Tìm hiểu thêm về điều đó trong bước tiếp theo. Có một sửa đổi cần thực hiện: Bạn phải tháo đèn LED nguồn màu đỏ khỏi bảng vì nó liên tục hút 3mA. Với đèn LED bị loại bỏ, mô-đun chỉ sử dụng vài chục uA ở chế độ ngủ sâu, điều này sẽ giúp nó kéo dài hơn một năm trên hai pin AA chất lượng.

Hóa ra là tôi có thể sử dụng hai dải đầu cắm 4 chân cái và hàn trên một vài thành phần phụ ở dạng tự do để tôi có thể tháo ESP-01 để cập nhật phần sụn, trong khi nó vẫn nằm gọn trong ngăn chứa pin thứ ba.

Điều rất quan trọng là phải đấu dây chính xác cho ESP. Sử dụng bảng gian lận ở trên, kết nối nó như sau.

  1. Pin cộng với Vcc (D2), CH_PD (B2), RXD (D1), GPIO0 (C1), GPIO2 (B1) và một điện trở 47K.
  2. Pin trừ sang GND (A1) và một dây của công tắc.
  3. Dây còn lại của bộ chuyển đổi thành tụ điện 100nF và điện trở 4M7.
  4. Hai đầu điện trở và tụ điện để hở RST (C2).
  5. TXD (A2) có thể vẫn chưa được kết nối.

Chỉnh sửa: Tôi đã phải thay thế ESP-01 vì tôi đã mắc một sai lầm ngớ ngẩn và phá hủy nó. Tôi ngạc nhiên khi thấy rằng ESP-01 mới không đặt lại bằng tụ điện 100nF ban đầu. Nó có thể có một thiết kế hơi khác một chút. Tôi đã thay thế nó bằng một cái 2,2 uF và bây giờ nó hoạt động trở lại

Khi hoàn tất, mọi thứ có thể được gắn trong hộp, nhưng hãy chờ đợi, trước tiên chúng ta cần lập trình mô-đun.

Bước 4: Lập trình ESP-01

Lập trình ESP-01
Lập trình ESP-01
Lập trình ESP-01
Lập trình ESP-01
Lập trình ESP-01
Lập trình ESP-01

Để cài đặt chương trình cơ sở trên ESP-01 của bạn, bạn có thể xây dựng một giàn khoan nhỏ hoặc mua (gần như) một bộ lập trình hoàn chỉnh với giá khoảng 1 euro.

Lập trình giàn phần cứng

Xây dựng một giàn khoan nhỏ với một lần nữa hai đầu cái cho ESP-01. Ngoài ra, bạn cần một mô-đun nối tiếp USB, có khả năng cung cấp 3,3 volt. Lưu ý rằng chip ESP8266 không cứng 5 volt, vì vậy một sai sót ở đây có thể giết chết mô-đun của bạn. Dù sao, một lần nữa bằng cách sử dụng cheat sheet, hãy nối dây giàn khoan của bạn như sau:

  1. 3.3V từ mô-đun USBSerial sang Vcc, CH_PD, RST và GPIO2.
  2. GND của mô-đun USBSerial sang GND và GPIO0.
  3. TXD của mô-đun USBSerial sang RXD.
  4. RDX của mô-đun USBSerial tới TXD.

Lập trình viên xây dựng trước

Thật thú vị khi bạn tự xây dựng công cụ của mình, cách tiếp cận đơn giản hơn là tải giao diện ESP-01-to-serial từ trang web đấu giá yêu thích của bạn, hãy xem hình trên. Điều này dễ dàng hơn, nhỏ gọn hơn và đáng tin cậy hơn nhiều so với một giàn khoan. Tuy nhiên, một số trong số này không phải là lập trình viên, chỉ là giao diện nối tiếp. Bạn cần hàn một cầu nối dây giữa GND (chân A1) và GPIO0 (chân C1) ở mặt sau của giao diện, xem hình thứ hai. Lưu ý rằng ESP-01 nên được cắm với ăng-ten đối diện với phích cắm USB, không phải ngược lại!

Lưu ý: chúng cũng tồn tại với một công tắc, xem hình thứ ba, rất đẹp.

Tải phần sụn

Giả sử Arduino IDE 1.8.3 trở lên, hãy chọn Công cụ> Bảng và chọn bảng bạn có. Đối với một ESP-01 như tôi đã sử dụng, hãy chọn "Mô-đun ESP8266 Chung" và đặt các tùy chọn sau (đây phải là tất cả các giá trị mặc định):

  1. Chế độ đèn flash: DIO
  2. Tần số flash: 40MHz
  3. Tần số CPU: 80MHz
  4. Kích thước flash: 512KB (64KB SPIFFS) Lưu ý: nếu bạn sử dụng bảng ESP-01 màu đen, hãy chọn 1MB (64KB SPIFFS)
  5. Cổng gỡ lỗi: Đã tắt
  6. Mức độ gỡ lỗi: Không có
  7. Đặt lại phương pháp: ck
  8. Tốc độ tải lên 115200
  9. Cổng: chọn cổng được kết nối với giao diện USB Serial của bạn. Đối với PC Ubuntu của tôi là / dev / ttyUSB0

Kết nối giàn khoan / lập trình viên, tải Sketch bạn có thể tìm thấy tại đây https://gitlab.com/jeroenmeijer/Mailbox.git. Cung cấp thông tin đăng nhập người môi giới WiFi và MQTT cũng như cấu hình IP của bạn trong config.h và chọn Tải lên.

Bước 5: Lắp ráp tất cả

Lắp ráp tất cả
Lắp ráp tất cả

Tôi khoan một lỗ cho ống nhựa ở nắp trong của hộp thư, càng gần bản lề càng tốt, sau đó dán nóng hộp pin vào mặt dưới của nắp đó. Tiếp theo tôi dùng que diêm dày làm pít tông. Tôi đã dùng một cái tỉa để cắt que diêm theo chiều dài để công tắc sẽ mở ra nếu nắp bên ngoài được đóng lại. Tôi đã kiểm tra kết nối bằng cách mở nắp trong khi chạy mosquitto_sub để theo dõi tin nhắn MQTT (thay thế mqttbroker, người dùng và mật khẩu bằng cấu hình MQTT của bạn):

$ mosquitto_sub -h mqttbroker -v -t "stat / #" -u user -P password

Khoảng sáu giây sau khi nắp ngoài được mở, thông báo MQTT sau sẽ được xuất bản. Thời gian được sử dụng để đánh thức bộ điều khiển vi mô và thiết lập kết nối WiFi và nhà môi giới.

stat / mailbox / trigger {"vcc": 3050, "flats": true, "pres": 0, "RSSI": 29, "version": "005"}

Trong thời gian này, bộ điều khiển vi mô đã sử dụng khoảng 70mA. Khi hoàn tất, nó sẽ đi vào giấc ngủ sâu và trong trường hợp của tôi, nó sử dụng ít hơn 20uA. "vạt" luôn đúng, "vcc" cho biết điện áp pin tính bằng mV và "trước" phải bằng 0. Nếu là 1 hoặc 2, điều đó có nghĩa là hộp thư không thể gửi tin nhắn sớm hơn, vì nó không thể kết nối với WiFi hoặc vì nó không thể kết nối với nhà môi giới MQTT. "RSSI" là cường độ của tín hiệu WiFi. Cả hai đều rất tiện dụng để chẩn đoán các vấn đề.

Bạn nên theo dõi điện áp của pin trong vài ngày để đảm bảo thiết bị hoạt động như dự kiến và không làm hao pin vì một số lý do.

Phần sụn cũng có thể tự cập nhật qua mạng (OTA), nhưng điều đó hơi vượt quá phạm vi của hướng dẫn này. Đối với những người quan tâm, cấu hình OTA cũng có trong config.h.

Bước 6: Sử dụng Node-RED để hành động trên thông báo MQTT

Sử dụng Node-RED để hành động trên thông báo MQTT
Sử dụng Node-RED để hành động trên thông báo MQTT

Cuối cùng, tôi đã tạo một luồng đơn giản trong Node-RED. Nút đầu tiên đăng ký chủ đề của hộp thư (stat / postbox / trigger). Khi nhận được tin nhắn, nút thứ hai sẽ định dạng một email *). Nút cuối cùng gửi nó đến địa chỉ gmail của tôi, sử dụng gmail làm máy chủ SMTP. Điện thoại của tôi sau đó sẽ thông báo cho tôi về thư mới.

Tôi đã thêm luồng Node-RED vào đoạn mã gitlab để bạn có thể nhập nó vào luồng Node-RED của mình.

Tất nhiên, bạn có thể thêm một số nút khác, chẳng hạn như để ghi các sự kiện hộp thư vào MariaDb hoặc SqlLite, hoặc tạo thêm cảnh báo khi điện áp pin xuống dưới 2,7 vôn.

Chúc bạn săn thư vui vẻ!

*) Xem trang tiếp theo, tôi đang sử dụng PushBullet bây giờ thay vì email.

Bước 7: Suy nghĩ sau

Luôn luôn có cảm giác rằng mọi thứ có thể đã được thực hiện tốt hơn.

Chuyển

Tôi sẽ thích sử dụng một nam châm (siêu) và một tiếp điểm bằng cây sậy thay vì cách tiếp cận pít tông hơi vụng về. Có hai lý do. Một là, không có cách nào tôi có thể thực hiện điều này với việc đóng tiếp điểm khi hộp được mở, và việc nó luôn đóng có nghĩa là một dòng điện nhỏ sẽ luôn chạy qua. Khi nhìn lại, dòng điện nhỏ hơn 1uA chạy qua điện trở 4M7 sẽ không phải là vấn đề lớn về tuổi thọ pin. Cái kia là một cái thực tế hơn. Tôi đã lập dự án này vào thứ Bảy và viết phần mềm, xây dựng tất cả vào Chủ nhật từ những gì đang diễn ra xung quanh. Tôi chỉ đơn giản là không có một liên hệ sậy trong hộp rác.

Lưu ý: như diy_bloke đã nhận xét, các điểm tiếp xúc bằng sậy có xu hướng bị dính khi bị nhiễm từ trong thời gian dài, vì vậy có lẽ pít tông không phải là một ý tưởng tồi chút nào. Chúng ta sẽ xem. *)

Thông báo về việc làm trống

Hộp thư cũng sẽ gửi một tin nhắn khi làm trống nó. Điều này không có gì to tát nhưng với việc nhiều người hơn trong nhà nhận được cảnh báo, người ta có thể kết thúc bằng một vòng kiểm tra hộp thư bất chấp toàn bộ mục đích của nó! Có một số cách để giải quyết vấn đề này, chẳng hạn như kiểm tra xem nắp bên trong có được nâng lên hay không và nếu có, đừng gửi tin nhắn. Hoặc thay vì sử dụng công tắc nắp, hãy cài đặt một máy dò ở dưới cùng của hộp thư. Hoặc một nút đặt lại nhỏ được nhấn khi làm trống nó. Tuy nhiên, tất cả sẽ làm phức tạp mọi thứ và có thể làm giảm độ tin cậy.

Nhắn tin

Gửi email là một cách khá hiệu quả nhưng thô thiển để đưa ra cảnh báo. Một cách thanh lịch hơn sẽ là ứng dụng điện thoại, nhưng tôi chưa tìm thấy ứng dụng bảng điều khiển MQTT Android có thể được định cấu hình để kích hoạt cảnh báo hệ điều hành khi nhận được một tin nhắn nhất định. Nếu có một trong những xung quanh, xin vui lòng thêm vào các ý kiến. **)

*) Sau hơn một năm đi vào hoạt động, hóa ra que kẹo mút mà tôi sử dụng, về cơ bản là giấy cuộn cứng, có xu hướng ngắn lại dưới áp lực không đổi của lò xo công tắc. Sau một số khắc phục sự cố, tôi đã thay thế nó bằng một thanh gỗ.

**) Tôi hiện đang sử dụng PushBullet cho các tin nhắn đẩy, tách biệt với bảng điều khiển MQTT. Bạn có thể tìm thấy một giao diện thấp Node-RED nhỏ cho API tại đây. Đảm bảo bạn cung cấp mã thông báo truy cập trong nút "Chuẩn bị cho pushbullet" và địa chỉ email của bạn cho mục đích dự phòng trong nút "Thử lại".

Đề xuất: