Cayenne MQTT và ESP8266 ESP-01

Bạn đã bao giờ nghĩ đến việc sử dụng mô-đun WiFi ESP8266 ESP-01 của mình như một bo mạch độc lập cho ba (3) thành phần là cảm biến DHT11 (cho nhiệt độ và độ ẩm), mô-đun relay 01 kênh và cảm biến âm thanh chưa? Vâng, may mắn cho bạn, điều này là có thể! Ngoài ra, còn có nhiều hơn thế nữa: Tất cả các thành phần này được kiểm soát và giám sát thông qua một trong những nền tảng IoT có sẵn: Nền tảng IoT Cayenne.

Đây là những gì chúng ta cần:

  1. Mô-đun ESP8266 ESP-01 WiFi
  2. FTDI Breakout Board + Mini USB cable
  3. ESP8266 ESP-01 Breakout Board (Tùy chọn)
  4. Mô-đun 01-Channel Relay
  5. Cảm biến DHT11 Temperature and Humidity
  6. Cảm biến Sound Sensor
  7. Breadboards
  8. Mô-đun 5V to 3.3V Stepdown Buck (Tùy chọn)
  9. Dây cắm nhiều màu

Đầu tiên, chúng ta cần nghiên cứu sơ đồ chân cho các thành phần này. Đây là các mô-đun chính mà chúng ta sẽ sử dụng cho bài tập này.

img_4629

ESP8266 ESP-01 Wifi Module

ESP8266 ESP-01

Chúng ta cần phải cẩn thận vì bo mạch này chạy trên logic 3.3V. Trường hợp nguồn điện của bạn chỉ cung cấp 5V, hãy tham khảo bộ chia điện áp bên dưới. Bạn có thể chọn điện trở chính xác để cung cấp nguồn điện dồi dào cho mô-đun ESP8266 của mình. img_4636-1

01-Channel Relay Module

1-Channel Relay Module

Mô-đun Relay mà tôi đang sử dụng là mô-đun ở trên. Nó có ba chân khác nhau cho nguồn và tín hiệu. Đối với nguồn, các pin là VCC và GND. Để bật hoặc tắt rơ le, chân IN được sử dụng. Trong khi tôi làm thí nghiệm, rơ le hoạt động rất tốt với nguồn điện 3,3V. Tôi cấp tín hiệu mức cao rơle hoạt động.

DHT11 Temperature and Humidity Sensor
DHT11

Đây là cảm biến DHT11. Nó đọc nhiệt độ và độ ẩm của vị trí đặt cảm biến. Nó có hai chân cho nguồn (“-” cho GND, chân giữa là VCC). Chân có nhãn “S” là chân đầu vào. Các dữ liệu được nhận qua chân này.

Sound Sensor
Sound Sensor

Cảm biến âm thanh cũng có 3 chân: VCC, GND và OUT. Chân OUT gửi mức âm thanh ở vị trí đặt cảm biến. Bạn cũng có thể kiểm soát độ nhạy của nó bằng cách vặn chiết áp trên nó (hộp màu xanh với “bánh răng” màu trắng bên trong).

FTDI USB to TTL Serial Converter
FTDI USB to TTL Serial Converter

Đây là Bộ chuyển đổi nối tiếp USB sang TTL. Chúng tôi sử dụng board này để upload code của mình lên Mô-đun WiFi ESP8266 ESP-01. Nó cũng có thể được sử dụng để lập trình các bộ vi điều khiển khác nhau. Bo mạch thường có 6 chân (mặc dù bạn có thể hàn nhiều chân tiêu đề hơn trên cả hai mặt của bảng): DTR, RX, TX, VCC, CTS và GND. CTS thường không được sử dụng. Đối với hoạt động của chúng tôi, chỉ cần 4 chân: RX, TX, VCC và GND.
Trong hình dưới đây, tôi đã đặt mô-đun FTDI thành 3.3V bằng cách thay đổi thiết lập jumper của nó:

img_4767

Khi chân thứ nhất và thứ hai được kết nối, mô-đun FTDI sẽ cung cấp nguồn điện 5 volt (tương tự với chân TX). Khi chân thứ 2 và thứ 3 được kết nối, nó sẽ cung cấp nguồn 3,3 volt (tương tự với chân TX).

5V to 3.3V Stepdown Power Supply Buck Module (OPTIONAL)

5V to 3.3V Stepdown Power Supply Buck Module

Đây là TÙY CHỌN trừ khi bảng đột phá FTDI của bạn không cung cấp cho bạn tùy chọn thay đổi điện áp (thường là giữa hai mức này: 3,3V và 5V). Mô-đun Buck của nguồn cung cấp bước xuống 5V đến 3.3V được sử dụng để “chuyển đổi” 5V thành 3.3V như tên gọi của nó. Rất hữu ích cho các mô-đun sử dụng logic 3.3V.
Trước khi tiếp tục viết mã, chúng ta cần thiết lập những thứ sau trong Arduino IDE. Đối với các thư viện, hãy tải chúng xuống từ liên kết được cung cấp cho mỗi thư viện (xem bên dưới) tại Github.

  1. ESP8266 Boards – For step by step instructions, please see next section.
  2. SimpleDHT Libraries – SimpleDHT libraries can be downloaded here.
  3. SimpleTimer Libraries – Simple Libraries can be downloaded here.

ESP8266 Boards Set Up in Arduino IDE

Việc thiết lập các bo mạch ESP8266 khá dễ dàng. Vui lòng làm theo các bước dưới đây:

  1. Mở Arduino IDE của bạn.
  2. Vào File > Preferences.
    ArduinoIDE_File_Preference
  3. Tại mục Additional Boards Manager URLs, điền vào URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json. Click OK.
    ArduinoIDE_PreferencesWindow
  4. Vàp Tools > Board > Boards Manager.
    ArduinoIDE_File_Tools_Board_BoardManager
  5. Tại hộp thoại Boards Manager, tìm esp8266và cài đặt esp8266 by ESP8266 Community Version x.x.x. Đóng hộp thoại Boards Manager.
    ArduinoIDE_BoardsManager
  6. Vào Tools > Board, tìm và chọn Generic ESP8266 Module.
    ArduinoIDE_Select_BoardsManager

Thêm thư viện Libraries

  1. Truy cập liên kết được cung cấp ở trên để biết hai (2) thư viện bắt buộc (SimpleDHT and SimpleTimer.
  2. Đối với mỗi liên kết, hãy nhấp vào Clone or Download. Một cửa sổ nhỏ xuất hiện, sau đó nhấp vào Download Zip. Tham khảo các hình ảnh hiển thị bên dưới:SimpleDHTLibraryDownload.pngSimpleTimerLibraryDownload
  3. Lưu tệp ZIP cho mỗi thư viện.
  4. Trong Arduino IDE, đi tới Sketch > Include Library > Add .Zip Library.
  5. Xác định vị trí và thêm từng thư viện (từng thư viện một).
    ArduinoIDE_SelectLibs

Thêm Cayenne Libraries

Thư viện Cayenne có thể được cài đặt cho Arduino IDE thông qua Trình quản lý thư viện. Để thực hiện việc này, hãy làm theo các bước bên dưới:

  1. Trong Arduino IDE, đi tới Sketch > Include Library. Click Manage Libraries.
    ArduinoIDE_Goto_LibraryManager 
  2. Trong cửa sổ sẽ xuất hiện, hãy nhập Cayenne vào trường tìm kiếm. Install the Cayenne by myDevices Version x.x.x and CayenneMQTTby myDevices Version x.x.x. Đóng hộp thoại. Các thư viện này cũng có sẵn tại Github (Cayenne and CayenneMQTT libraries).ArduinoIDE_LibraryManager

Programming Mode

Ban đầu, chúng tôi cần thiết lập ESP8266 ESP-01 sang chế độ lập trình. Chúng tôi chưa cần kết nối các thành phần của mình vì việc kết nối chúng có thể khiến quá trình tải lên bản phác thảo không thành công. Bảng dưới đây nêu chi tiết các chân được kết nối với nhau giữa ESP8266 ESP-01 WiFi module và bộ chuyển đổi FTDI USB to TTL Serial:

Program Mode Connections

Bạn cần đặt jumper của mô-đun FTDI thành 3.3V. Bằng cách này, chúng tôi sẽ không cần bất kỳ bộ chia điện áp nào hoặc mô-đun buck xuống bậc. Bộ chuyển đổi USB to Serial của bạn có thể có các chỉ định pin khác nhau. Mô tả trên được minh họa trong giản đồ dưới đây:

ESP8266 Project 3v3 Program Mode_bb

Bây giờ chúng tôi đã sẵn sàng thiết lập dashboard của mình và upload sketches:
Upload the sketch

 Tạo Cayenne Dashboard

  1. Đăng nhập vào tài khoản Cayenne (đăng ký miễn phí nếu bạn chưa có tại khoản tại link Cayenne Signup Page):
    Cayenne USB Serial - 01 Logon
  2. Sau khi đăng nhập, bước tiếp theo sẽ là chọn thiết bị mà chúng ta sẽ sử dụng. Nếu đây là thiết bị đầu tiên của bạn trong trang tổng quan, hãy chọn All Devices:
    1 - All DevicesSau đó, chọn Generic ESP8266 dưới phần Microcontrollers:
    2 - ESP8266Nếu trước đây bạn đã thêm các thiết bị hiện có, bạn cần thêm thiết bị bằng cách nhấp vào Add Devices/Widget menu:
    Cayenne USB Serial - 02 Add New Device
    Sau đó chọn ESP8266 vì đây là bảng phát triển của chúng tôi::
    ESP8266MQTT
  3. Trong trang tiếp theo, bạn được hiển thị với MQTT Username, MQTT Password, and Client ID. Chúng ta cần những chi tiết này trong bản phác thảo sau. Bạn cũng sẽ thấy ở phần dưới cùng của trang rằng nó đang đợi thiết bị kết nối.
    CayenneCredentials
  4. Bây giờ, chúng ta tiến hành Sketch. Mở Arduino IDE. Đi tới File > Examples > Cayenne-MQTT-ESP8266 > ESP8266. Bản phác thảo này sẽ là bản phác thảo cơ sở của chúng tôi.MQTT Sketch
  5. Quay lại Cayenne Portal. Hãy lưu ý những điều sau, bởi vì chúng tôi sẽ sử dụng nó trong bản phác thảo của mình::
    • MQTT USERNAME
    • MQTT PASSWORD
    • CLIENT ID
  6. Bây giờ, quay lại Arduino IDE. Dán các giá trị trong phần được đánh dấu trong ảnh chụp màn hình bên dưới::
    MQTT Creds Section
  7. Ngoài ra, cung cấp tên WiFi (SSID) và mật khẩu trong phần này của mã:
    Wifi creds
  8. Nhân tiện, chúng ta cần bao gồm các thư viện cần thiết:: SimpleDHT and SimpleTimer. SimpleDHT sẽ cho phép chúng tôi sử dụng DHT Temperature. The SimpleTimer sẽ cho phép chúng tôi thực thi các phương thức bên ngoài loop() method:
    Additional Libraries
  9. Bây giờ chúng ta cần khai báo các chân sẽ được sử dụng bởi các cảm biến.
    • DHT11 Pin = Pin 2 (GPIO2 of ESP8266 ESP-01)
    • Sound Pin = Pin 3 (GPIO3 of ESP8266 ESP-01)
    • Relay Pin = Pin 1 (GPIO1 of ESP8266 ESP-01)
      Sensor declaration
  10. Vì chúng tôi sẽ gửi dữ liệu đến Cayenne IoT platform sử dụng MQTT API, chúng ta cần chuyển giá trị cảm biến cho virtual pins. The virtual pins sẽ được sử dụng bởi widgets trong dashboard. Chúng tôi sẽ không sử dụng V1, chúng tôi đã chỉ định điều này như một đầu ra (để điều khiển rơ le - được sử dụng trong Cayenne dashboard widgets):
    • V2 – Humidity (data from DHT11)
    • V3 – Temperature (data from DHT11)
    • V4 – Sound (data from Sound Sensor)
  11. Tải bản phác thảo lên ESP8266 ESP-01 Board. Hãy chắc chắn rằng board được chọn là Generic ESP8266 Module:ESp8266 board on board

Complete Code

// This example shows how to connect to Cayenne using an ESP8266 and send/receive sample data.
// Make sure you install the ESP8266 Board Package via the Arduino IDE Board Manager and select the correct ESP8266 board before compiling.

//#define CAYENNE_DEBUG
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>

#include <SimpleTimer.h> // Download from https://github.com/jfturcot/SimpleTimer
#include <SimpleDHT.h> // Download from https://github.com/adafruit/DHT-sensor-library

// WiFi network info.
char ssid[] = "<your ssid/wifi name>";
char wifiPassword[] = ""<your ssid/wifi password>"";

// Cayenne authentication info. This should be obtained from the Cayenne Dashboard.
char username[] = "<your MQTT Username>";
char password[] = "<your MQTT Password>";
char clientID[] = "<your client id>";

// DHT11 Pin
int pinDHT11 = 2;
SimpleDHT11 dht11;

// Sound Pin
int soundPin = 3;

// Relay Pin
int relayPin = 1;

// Timer
SimpleTimer timer;

void setup() {
 Serial.begin(9600);
 Cayenne.begin(username, password, clientID, ssid, wifiPassword);
 pinMode(relayPin, OUTPUT); // Relay
 digitalWrite(relayPin, HIGH);
 pinMode(soundPin, INPUT); // Sound
 timer.setInterval(200L, transmitData); // Method to execute every 200ms
}

void loop() {
 Cayenne.loop();
 timer.run();
}

CAYENNE_IN(relayPin) {
 if (getValue.asInt() == 1) { // NOTE: Channel = Virtual Pin
 digitalWrite(relayPin, LOW);
 }
 else {
 digitalWrite(relayPin, HIGH);
 }
}

void transmitData()
{
 byte temperature = 0;
 byte humidity = 0;
 int err = SimpleDHTErrSuccess;

if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
 Cayenne.virtualWrite(V4, 0);
 Cayenne.virtualWrite(V2, 0);
 }
 else {
 Cayenne.virtualWrite(V4, (int)temperature);
 Cayenne.virtualWrite(V2, (int)humidity);
 }

if (digitalRead(soundPin) == HIGH) {
 Cayenne.virtualWrite(V3, HIGH);
 }
 else {
 Cayenne.virtualWrite(V3, LOW);
 }
}


Kết nối Sensors and Modules

Ở giai đoạn này, bạn sẽ có thể tải lên bản phác thảo của mình thành công. Bây giờ, hãy tháo bo mạch khỏi nguồn. Ngoài ra, hãy xóa kết nối GND từ GPIO0. Chúng tôi không cần GPIO0 kết nối tới GND, trừ khi chúng tôi sẽ cập nhật bản phác thảo. Tham khảo bảng cho từng cảm biến và mô-đun bên dưới:

Sensor and Modules Connections

Tất cả các bộ nguồn của các thành phần này được kết nối với điện áp đầu ra của mô-đun bước xuống, nghĩa là chúng được cấp nguồn qua 3,3V. Nguồn điện chính là FTDI breakout board. Sơ đồ bên dưới hiển thị các kết nối hoàn chỉnh, sau khi tải lên thành công bản phác thảo:

ESP8266 Project 3v3_ no rx and tx connection

Lưu ý: Chân RX vàTX của FTDI mô-đun không được kết nối với chân TX và RX of mô đun wifi, và như vậy là GPIO0 (từ GND).

Hình ảnh dưới đây là thiết lập thực tế của các sơ đồ được hiển thị ở trên:
img_4805img_4807

Đó là nó! Chúng tôi đã hoàn tất các thiết lập này: Boards, Libraries, and Components. Bây giờ chúng tôi đã sẵn sàng để cấu hình dự án của mình với Cayenne bằng cách sử dụng MQTT. Nhân tiện, MQTT là viết tắt của MQ Telemetry Transport. Nói một cách đơn giản, nó là một giao thức truyền tải tin nhắn giữa các máy và Internet of Things! Thêm về điều này tại Cayenne Docs.

Cấp nguồn cho board một lần nữa. The ESP8266 ESP-01 Wifi Module có thể kết nối với Wifi của bạn. Bây giờ, quay trở lại Cayenne portal. Bạn sẽ có thể thấy dashboard with widgets được lập sẵn trước. Bây giờ bạn có thể tùy chỉnh dashboard.

Ban đầu, đây là cách trang tổng quan trông như thế nào khi ESP8266 ESP-01 WiFi module bắt đầu gửi dữ liệu đến Cayenne Dashboard (dưới thiết bị được định cấu hình ở đó):

Initial Dashboard - Cayenne

 

Add the initial widgets shown above, by clicking the “+” icon at the upper right hand corner of each initial widget:
Add widgets

Once added, we will now customize each widget. This is how it looks like when these initial widgets are added:
added widgets

To customize each widget, click on the right-most icon, then select Settings. Refer to screenshot below:
Customize Widget

A pop-up window appears and will allow us to change the Widget Name, Channel, Widget Icon, and Number of Decimal Places. We will leave Channel as it is. Don’t change the value of Channel, since the value here is the Virtual Pin (V0, V1, V2…) used in the code for this widget. Virtual Pin 4 (V4) is the temperature, Virtual Pin 2 (V2) is the humidity, and Virtual Pin 3 (V3) is the value of the sound sensor (0/1).

Below are the configuration/setting for each initial widget:

Config - HumidityConfig - Sound DetectedConfig - Temperature

Here is how they look afterward:
Config - Finished Initial

Now, we still need to add one more widget. This widget is for the relay, to turn it on/off. On the left side portion of the dashboard (upper-left), click Add New, then click Device/Widget:
Cayenne USB Serial - 02 Add New Device

 

Scroll down further down, and look for Custom Widgets. Select Button:
Custom Widgets - Button

We need to change the settings for the Button widget:

  • Name = Relay Switch
  • Device = Generic ESP8266 (or your named device if you have already)
  • Data = Digital Actuator
  • Unit = Digital (0/1)
  • Channel = 1 (this is GPIO1 of the ESP8266 ESP-01 WiFi Module – review code)
  • Choose Icon = Button (you may choose what icon you desire)

Below is the screenshot of the Button settings. Click Add Widget afterwards:
Add Button Widget

The final dashboard now looks like this:
Final Dashboard

And we’re DONE! Now, try to switch on/off the Relay Switch. The relay connected to the ESP8266 ESP-01 WiFi Module will turn on or off – you will hear clicking sounds. Try to make some noise. The sound widget will register 1 (if noise is detected, 0 if not). Try observing the Temperature and Humidity widgets – these values change according to what is “sensed” from where the DHT11 module is.

We’ve just used the Cayenne MQTT API to connect our device with components attached to it.

Comments

Popular posts from this blog

Cảm biến nhiệt độ ẩm DHT11 với ESP8266 và ứng dụng BLYNK

Cảm biến MQ2 cảnh báo khói qua điện thoại với ESP8266 và ứng dụng Blynk

Cảm biến lửa cảnh báo cháy qua điện thoại với ESP8266 và ứng dụng Blynk