Mục lục:

UbiDots-Kết nối ESP32 và xuất bản dữ liệu nhiều cảm biến: 6 bước
UbiDots-Kết nối ESP32 và xuất bản dữ liệu nhiều cảm biến: 6 bước

Video: UbiDots-Kết nối ESP32 và xuất bản dữ liệu nhiều cảm biến: 6 bước

Video: UbiDots-Kết nối ESP32 và xuất bản dữ liệu nhiều cảm biến: 6 bước
Video: [Lập trình ESP 32]Bài 10 - Hướng dẫn kết nối server blynk và điều khiển thiết bị qua internet 2024, Tháng bảy
Anonim
UbiDots-Kết nối ESP32 và xuất bản nhiều dữ liệu cảm biến
UbiDots-Kết nối ESP32 và xuất bản nhiều dữ liệu cảm biến

ESP32 vàESP 8266 là SoC rất quen thuộc trong lĩnh vực IoT. Đây là một loại lợi ích cho các dự án IoT. ESP 32 là một thiết bị tích hợp WiFi và BLE. Chỉ cần cung cấp cấu hình SSID, mật khẩu và IP của bạn và tích hợp mọi thứ vào đám mây. Ở đây trong phần hướng dẫn này, chúng ta sẽ suy ngẫm về một số thuật ngữ cơ bản của IoT như nền tảng IoT, MQTT, cổng cố định, v.v. Vì vậy, chúng ta hãy cùng xem qua

  • Kiến trúc IoT nói một cách rất đơn giản bao gồm một thiết bị nhúng và nền tảng IoT để đưa thiết bị lên đám mây. Ở đây chúng tôi đang sử dụng nền tảng UbiDots IoT để trực quan hóa dữ liệu cảm biến.
  • Quản lý cài đặt IP và thông tin đăng nhập của người dùng có thể là một vấn đề đau đầu đối với người dùng. Điều gì sẽ xảy ra nếu Người dùng muốn thay đổi thông tin đăng nhập WiFi? Điều gì sẽ xảy ra nếu người dùng muốn chuyển đổi cài đặt DHCP / IP tĩnh? Việc nhấp nháy ESP32 mọi lúc không đáng tin cậy và thậm chí không phải là giải pháp cho những vấn đề này. Vì vậy, chúng tôi sẽ đi qua cổng bị khóa để lưu thông tin đăng nhập WiFi và các cấu hình khác.
  • MQTT hiện đang trở thành một thuật ngữ rất phổ biến trong thế giới IoT. nó đã vượt qua yêu cầu và phản hồi (HTTP) bởi Xuất bản và Đăng ký vì kiến trúc nhanh, mạnh mẽ và tinh gọn.

Ở đây trong hướng dẫn này, chúng tôi sẽ chứng minh.

  • Cung cấp thông tin đăng nhập WiFi và MQTT bằng Captive Portal.
  • Xuất bản và đăng ký nhiều dữ liệu Cảm biến lên UbiDots.
  • Đọc dữ liệu cảm biến từ Cảm biến nhiệt độ và độ ẩm không dây.
  • Lưu trữ một biểu mẫu web từ ESP32.
  • Đọc và Viết từ SPIFFS ESP32.

Bước 1: Đặc điểm kỹ thuật phần cứng và phần mềm

Đặc điểm kỹ thuật phần cứng và phần mềm
Đặc điểm kỹ thuật phần cứng và phần mềm
  • ESP32 WiFi / BLE
  • Cảm biến nhiệt độ và độ ẩm không dây

Đặc điểm kỹ thuật phần mềm

Arduino IDE

Bước 2: Tạo Cổng cố định

Tạo một Cổng cố định
Tạo một Cổng cố định
Tạo một Cổng cố định
Tạo một Cổng cố định
Tạo một Cổng cố định
Tạo một Cổng cố định

Cổng bị khóa là một trang web được hiển thị cho người dùng mới được kết nối trước khi họ được cấp quyền truy cập rộng hơn vào tài nguyên mạng. Ở đây, chúng tôi đang cung cấp ba trang web để lựa chọn giữa Cài đặt DHCP và IP tĩnh. chúng ta có thể xác định địa chỉ IP cho ESP theo hai cách.

  • Địa chỉ IP của DHCP- đó là một cách để gán động địa chỉ IP cho thiết bị. Địa chỉ IP mặc định của ESP là 192.168.4.1
  • Địa chỉ IP tĩnh - chỉ định Địa chỉ IP cố định cho thiết bị mạng của chúng tôi. để cung cấp IP tĩnh cho thiết bị, chúng ta cần xác định địa chỉ IP, địa chỉ cổng vào và mặt nạ mạng con.

Trang web đầu tiên đang được lưu trữ tại 192.168.1.77. Tại đây Người dùng được cung cấp các nút radio để chọn giữa cài đặt DHCP và IP tĩnh. Trong trang web tiếp theo, chúng tôi phải cung cấp thông tin liên quan đến IP để tiếp tục.

Mã HTML

Bạn có thể tìm thấy mã HTML cho các trang web trong kho lưu trữ Github này. Bạn có thể sử dụng bất kỳ IDE hoặc trình soạn thảo văn bản nào như Sublime hoặc notepad ++ để tạo các trang web HTML.

  • Đầu tiên Tạo một trang web HTML có chứa hai nút radio để chọn giữa Cài đặt DHCP và IP tĩnh.
  • Bây giờ hãy tạo nút để gửi câu trả lời của bạn
  • Đặt tên cho các nút radio.
  • Lớp máy chủ Web ESP sẽ lấy các tên này làm đối số và nhận phản hồi của các nút radio bằng cách sử dụng các đối số này
  • Bây giờ, hãy chèn nút 'GỬI' để gửi phản hồi đến thiết bị. Trong các trang web khác, chúng ta có các hộp văn bản.
  • Cung cấp giá trị tên và Kiểu đầu vào vào hộp văn bản và thêm nút gửi để 'GỬI' gửi phản hồi.
  • Tạo nút 'ĐẶT LẠI' để đặt lại nội dung của trường văn bản.

Bước 3: Cung cấp thông tin đăng nhập WiFi và UbiDots

Cung cấp thông tin đăng nhập WiFi và UbiDots
Cung cấp thông tin đăng nhập WiFi và UbiDots

Sự cố chính xảy ra khi quản lý thông tin đăng nhập WiFi. Mặc dù chúng tôi có thư viện WiFiMulti để chúng tôi có thể cung cấp nhiều SSID và mật khẩu cho thiết bị và thiết bị sẽ kết nối với mạng khả dụng. Nhưng, điều gì sẽ xảy ra nếu mạng khả dụng không có trong danh sách WiFiMulti. Việc nhấp nháy thiết bị ESP32 mọi lúc không phải là một giải pháp đáng tin cậy.

Để giải quyết vấn đề này, Chúng tôi đang lưu trữ một trang web nơi người dùng có thể gửi SSID và Mật khẩu của mạng có sẵn. Nó hoạt động như sau.

  • Trang web được lưu trữ tại IP tĩnh hoặc IP DHCP do người dùng chọn từ cổng cố định
  • Trang web này chứa các trường văn bản để nhập SSID, mật khẩu và ID mã thông báo UBIDOTS để kết nối thiết bị với UbiDots.
  • Nhập SSID và mật khẩu của WiFi cục bộ của bạn vào các trường nhập, Nhập Id mã thông báo của UbiDot và nhập SUBMIT
  • Các thông tin đăng nhập này được lưu trong EEPROM của ESP32
  • Sau 60 giây Thiết bị sẽ tự động ngắt kết nối khỏi AP
  • Lần tới khi bạn bật thiết bị, Người dùng không phải làm theo quy trình này, Thiết bị sẽ tự động lấy thông tin đăng nhập của người dùng từ EEPROM và tiếp tục xuất bản các kết quả đọc của cảm biến lên UbiDots.

Bước 4: Xuất bản các bài đọc của cảm biến lên UbiDots

Ở đây chúng tôi đang sử dụng Cảm biến nhiệt độ và độ ẩm không dây với thiết bị ESP 32 để lấy dữ liệu nhiệt độ và độ ẩm. Chúng tôi đang gửi dữ liệu đến UbiDots bằng giao thức MQTT. MQTT tuân theo cơ chế xuất bản và đăng ký thay vì yêu cầu và phản hồi. Nó nhanh hơn và đáng tin cậy hơn HTTP. Điều này hoạt động như sau.

  • Chúng tôi đang sử dụng Bộ lập lịch tác vụ để Lập lịch tác vụ như tìm nạp dữ liệu từ các cảm biến, Xuất bản các bài đọc của bộ cảm biến, Đăng ký chủ đề MQTT.
  • Đầu tiên, hãy bao gồm các tệp tiêu đề của Task Scheduler, nó là phiên bản và lên lịch cho các tác vụ.
  • Chúng tôi đã lên lịch cho hai nhiệm vụ đề cập đến hai hoạt động kiểm soát khác nhau.

#define _TASK_TIMEOUT # bao gồm

Bộ lập lịch ts;

// --------- Nhiệm vụ ------------ // Tác vụ tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Tác vụ tWiFi (10 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL, & taskWiFiDisable);

Nhiệm vụ 1 là để đọc giá trị cảm biến, nhiệm vụ này chạy trong 1 giây cho đến khi hết thời gian chờ 10 giây

  • Khi Task1 hết thời gian chờ, Chúng tôi đang kết nối với Wifi cục bộ và nhà môi giới MQTT.
  • Bây giờ Tác vụ 2 đã được bật và chúng tôi đang tắt Tác vụ 1

  • Nhiệm vụ 2 là xuất bản dữ liệu cảm biến tới nhà môi giới UbiDots MQTT, tác vụ này chạy trong 20 giây cho đến khi hết thời gian chờ 20 giây
  • Khi Task2 hết thời gian, Task 1 được bật lại và Task2 bị vô hiệu hóa. Ở đây một lần nữa, chúng tôi đang nhận được giá trị cập nhật và quá trình tiếp tục.

Đọc dữ liệu cảm biến I2C

Chúng tôi đang nhận được khung hình 29 byte từ Cảm biến nhiệt độ và độ ẩm không dây. Khung này được thao tác để lấy dữ liệu nhiệt độ và độ ẩm thực tế

dữ liệu uint8_t [29];

data [0] = Serial1.read (); độ trễ (k); // chck cho byte bắt đầu if (data [0] == 0x7E) {while (! Serial1.available ()); for (i = 1; i <29; i ++) {data = Serial1.read (); trì hoãn (1); } if (data [15] == 0x7F) /////// để kiểm tra xem dữ liệu nhận có đúng không {if (data [22] == 1) //////// đảm bảo loại cảm biến đúng {

độ ẩm = ((((dữ liệu [24]) * 256) + dữ liệu [25]) /100.0); độ ẩm /=10.0; cTempint = (((uint16_t) (data [26]) << 8) | data [27]); cTemp = (float) cTempint /100.0; cTemp / = 10,0; fTemp = cTemp * 1.8 + 32; fTemp / = 10,0; pin = ngẫu nhiên (100, 327); điện áp = pin / 100; nodeId = data [16];}

Kết nối với UbiDots MQTT API

Bao gồm tệp tiêu đề cho quy trình MQTT

#bao gồm

xác định các biến khác cho MQTT như tên khách hàng, địa chỉ người môi giới, ID mã thông báo (Chúng tôi đang tìm nạp mã thông báo ID từ EEPROM)

#define MQTT_CLIENT_NAME "ClientVBShightime123"

char mqttBroker = "things.ubidots.com";

char payload [100]; chủ đề char [150];

// tạo biến để lưu trữ mã thông báo ID

Chuỗi tokenId;

Tạo các biến để lưu trữ các dữ liệu cảm biến khác nhau và tạo một biến char để lưu trữ chủ đề

#define VARIABLE_LABEL_TEMPF "tempF" // Gán nhãn biến # xác định VARIABLE_LABEL_TEMPC "tempC" // Gán nhãn biến # xác định VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "ẩm" // Gán nhãn biến

char topic1 [100]; char topic2 [100]; char topic3 [100];

xuất bản dữ liệu lên chủ đề MQTT đã đề cập, trọng tải sẽ giống như {"tempc": {value: "tempData"}}

sprintf (topic1, "% s", ""); sprintf (topic1, "% s% s", "/v1.6/devices/", DEVICE_LABEL); sprintf (tải trọng, "% s", ""); // Xóa payload sprintf (payload, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Thêm giá trị sprintf (payload, "% s {" value / ":% s}", payload, str_cTemp); // Thêm giá trị sprintf (payload, "% s}", payload); // Đóng dấu ngoặc từ điển Serial.println (payload); Serial.println (client.publish (topic1, payload)? "Publish": "notpublish");

// Làm tương tự cho chủ đề khác

client.publish () xuất bản dữ liệu lên UbiDots

Bước 5: Hình dung dữ liệu

Trực quan hóa dữ liệu
Trực quan hóa dữ liệu
Trực quan hóa dữ liệu
Trực quan hóa dữ liệu
Trực quan hóa dữ liệu
Trực quan hóa dữ liệu
  • Đi tới Ubidots và Đăng nhập vào tài khoản của bạn.
  • Điều hướng đến Trang tổng quan từ tab Dữ liệu được liệt kê ở trên cùng.
  • Bây giờ hãy nhấp vào biểu tượng "+" để thêm các widget mới.
  • Chọn một widget từ danh sách và thêm một biến và thiết bị.
  • Dữ liệu cảm biến có thể được hiển thị trên bảng điều khiển bằng cách sử dụng các tiện ích khác nhau.

Bước 6: Mã tổng thể

Mã Over cho HTML và ESP32 có thể được tìm thấy trong kho lưu trữ GitHub này.

Tín dụng

  • bảng đột phá ncd ESP32.
  • ncd Cảm biến nhiệt độ và độ ẩm không dây.
  • pubsubclient
  • UbiDots
  • Bảng kế hoạch

Đề xuất: