步驟1:硬件和軟件規(guī)范
ESP32 WiFi/BLE
無線溫濕度傳感器
軟件規(guī)格
Arduino IDE
第2步:創(chuàng)建俘虜門戶
強制門戶網(wǎng)站是一個網(wǎng)頁,向新連接的用戶顯示,然后才向他們授予對網(wǎng)絡(luò)資源的更廣泛訪問權(quán)限。在這里,我們提供三個網(wǎng)頁,供您在DHCP和靜態(tài)IP設(shè)置之間進行選擇。我們可以通過兩種方式為ESP定義IP地址。
DHCP IP地址-這是一種動態(tài)分配IP地址的方法到設(shè)備。 ESP的默認IP地址為192.168.4.1
靜態(tài)IP地址-為我們的網(wǎng)絡(luò)設(shè)備分配一個永久IP地址。為了向設(shè)備提供靜態(tài)IP,我們需要定義IP地址,網(wǎng)關(guān)地址和子網(wǎng)掩碼。
第一個網(wǎng)頁位于192.168.1.77。此處為用戶提供了單選按鈕,可以在DHCP和靜態(tài)IP設(shè)置之間進行選擇。在下一個網(wǎng)頁中,我們必須提供IP相關(guān)信息以繼續(xù)進行操作。
HTML代碼
可以在以下位置找到網(wǎng)頁的HTML代碼:
您可以使用任何IDE或文本編輯器(例如Sublime或notepad ++)來制作HTML網(wǎng)頁。
首先創(chuàng)建一個包含兩個單選按鈕的HTML網(wǎng)頁,以在DHCP和靜態(tài)之間進行選擇IP設(shè)置。
現(xiàn)在創(chuàng)建按鈕以提交您的回復(fù)
為單選按鈕命名。
ESP Web服務(wù)器類將使用這些名稱作為參數(shù),并使用這些參數(shù)獲取單選按鈕的響應(yīng)
現(xiàn)在插入“ SUBMIT”按鈕以將響應(yīng)發(fā)送到設(shè)備。網(wǎng)頁上,我們有文本框。
在文本框中輸入名稱值和輸入類型,然后在“ SUBMIT”中添加提交按鈕以提交響應(yīng)。
創(chuàng)建“ RESET” ‘按鈕以重置文本字段的內(nèi)容。
步驟3:提供Wi Fi和UbiDots憑據(jù)
主要問題是在管理WiFi憑據(jù)時發(fā)生的。即使我們有WiFiMulti庫,也可以在其中向設(shè)備提供多個SSID和密碼,然后設(shè)備將連接到可用的網(wǎng)絡(luò)。但是,如果可用網(wǎng)絡(luò)不在WiFiMulti列表中,該怎么辦。始終刷新 ESP32 設(shè)備不是一個可靠的解決方案。
為解決此問題,我們托管了一個網(wǎng)頁,用戶可以在其中提交可用網(wǎng)絡(luò)的SSID和密碼。它的工作方式如下。
該網(wǎng)頁托管于用戶從強制門戶中選擇的靜態(tài)IP或DHCP IP
此網(wǎng)頁包含用于輸入SSID的文本字段,密碼和UBIDOTS令牌ID將設(shè)備連接到 UbiDots 。
在輸入字段中輸入本地WiFi的SSID和密碼,然后輸入 UbiDot 》的令牌ID并輸入SUBMIT
這些憑據(jù)將保存在 ESP32 的EEPROM
60秒后,設(shè)備將自動與AP
下次打開設(shè)備時,用戶無需執(zhí)行此過程,設(shè)備將自動從EEPROM中獲取用戶憑據(jù)并繼續(xù)發(fā)布傳感器讀數(shù)到 UbiDots 。
步驟4:將傳感器讀數(shù)發(fā)布到UbiDots
此處我們正在將無線溫度和濕度傳感器與 ESP 32 設(shè)備一起使用,以獲取溫度和H亮度數(shù)據(jù)。我們正在使用 MQTT 協(xié)議將數(shù)據(jù)發(fā)送到UbiDots。 MQTT 遵循發(fā)布和訂閱機制,而不是請求和響應(yīng)。它比HTTP更快,更可靠。這項工作如下。
我們正在使用任務(wù)計劃程序來計劃任務(wù),例如從傳感器中獲取數(shù)據(jù),發(fā)布傳感器讀數(shù),訂閱 MQTT 主題。/li》
首先,包括Task Scheduler頭文件,它是實例并計劃任務(wù)。
我們已經(jīng)計劃了兩個任務(wù),它們涉及兩個不同的控制操作。
#define _TASK_TIMEOUT
#include
Scheduler ts;
//---------Tasks------------//
Task tSensor(4 * TASK_SECOND, TASK_FOREVER, &taskSensorCallback, &ts, false, NULL, &taskSensorDisable);
Task tWiFi(10* TASK_SECOND, TASK_FOREVER, &taskWiFiCallback, &ts, false, NULL, &taskWiFiDisable);
任務(wù)1用于讀取傳感器值,該任務(wù)運行1秒鐘,直到達到10秒超時。
當(dāng)Task1超時時,我們正在連接到本地Wifi和 MQTT 代理。
現(xiàn)在已啟用任務(wù)2并我們將禁用任務(wù)1
任務(wù)2用于將傳感器數(shù)據(jù)發(fā)布到 UbiDots MQTT 經(jīng)紀(jì)人,此任務(wù)將運行20秒,直到超時20秒
當(dāng)Task2達到超時時,將再次啟用任務(wù)1,并禁用Task2。再次在這里,我們獲取更新的值,并且過程繼續(xù)進行。
讀取I2C傳感器數(shù)據(jù)
我們從無線溫度和濕度傳感器獲得29字節(jié)的幀。對該框架進行操作以獲取實際的溫度和濕度數(shù)據(jù)。
uint8_t data[29];
data[0] = Serial1.read();
delay(k);
//chck for start byte
if(data[0]==0x7E)
{
while (!Serial1.available());
for ( i = 1; i《 29; i++)
{
data[i] = Serial1.read();
delay(1);
}
if(data[15]==0x7F) /////// to check if the recive data is correct
{
if(data[22]==1) //////// make sure the sensor type is correct
{
humidity = ((((data[24]) * 256) + data[25]) /100.0);
humidity /=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;
battery = random(100,327);
voltage = battery/100;
nodeId = data[16];}
連接到UbiDots MQTT API
包括用于 MQTT 流程的頭文件。
#include
為 MQTT 定義其他變量,例如客戶端名稱,代理地址,令牌ID(我們正在從EEPROM中獲取令牌ID)
#define MQTT_CLIENT_NAME “ClientVBShightime123”
char mqttBroker[] = “things.ubidots.com”;
char payload[100];
char topic[150];
//create variable to store token ID
String tokenId;
創(chuàng)建變量以存儲不同的傳感器數(shù)據(jù)并創(chuàng)建char變量以存儲主題
#define VARIABLE_LABEL_TEMPF “tempF” // Assing the variable label
#define VARIABLE_LABEL_TEMPC “tempC” // Assing the variable label
#define VARIABLE_LABEL_BAT “bat”
#define VARIABLE_LABEL_HUMID “humid” // Assing the variable label
char topic1[100];
char topic2[100];
char topic3[100];
將數(shù)據(jù)發(fā)布到所提到的 MQTT 主題,有效負載將類似于 {“ tempc”: {value:“ tempData”}}
sprintf(topic1, “%s”,“”);
sprintf(topic1, “%s%s”, “/v1.6/devices/”, DEVICE_LABEL);
sprintf(payload, “%s”, “”); // Cleans the payload
sprintf(payload, “{”%s“:”, VARIABLE_LABEL_TEMPC); // Adds the value
sprintf(payload, “%s{”value“:%s}”, payload, str_cTemp); // Adds the value
sprintf(payload, “%s}”, payload); // Closes the dictionary brackets
Serial.println(payload);
Serial.println(client.publish(topic1,payload) ? “published” : “notpublished”);
//Do same for other topic as well
client.publish()將數(shù)據(jù)發(fā)布到UbiDots。
步驟5:可視化數(shù)據(jù)
轉(zhuǎn)到Ubidots并登錄到您的帳戶。
從頂部列出的“數(shù)據(jù)”標(biāo)簽導(dǎo)航到儀表板。
現(xiàn)在單擊“ + ”圖標(biāo)以添加然后ew小部件。
從列表中選擇一個小部件,然后添加變量和設(shè)備。
可以使用不同的小部件在儀表板上顯示傳感器數(shù)據(jù)。
責(zé)任編輯:wv
-
傳感器
+關(guān)注
關(guān)注
2565文章
52995瀏覽量
767358 -
Ubidots
+關(guān)注
關(guān)注
0文章
10瀏覽量
3951 -
ESP32
+關(guān)注
關(guān)注
21文章
1017瀏覽量
19260
發(fā)布評論請先 登錄
ESP32-P4—具備豐富IO連接、HMI和出色安全特性的高性能SoC

ESP32運行網(wǎng)頁服務(wù)器 (Web-Server)-入門篇

原來ESP32竟可《一“芯”兩用》既做人體檢測傳感器也做Wi-Fi數(shù)據(jù)傳輸

ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術(shù)規(guī)格書
【AI技術(shù)支持】ESP32-C3模組AT+MQTT連接AWS證書問題處理

ESP32 微控制器系列指南

將一個第15.4層堆棧傳感器連接到多個網(wǎng)關(guān)

esp32和esp8266代碼共用嗎
esp8266和esp32區(qū)別是什么
esp32用什么軟件編程
如果有多個DAC輸出或多個共用電源和接地的傳感器,可以使用多個XTR器件嗎?
如何將多個ESP連接到一個ESP并向服務(wù)器發(fā)送數(shù)據(jù)?
ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么區(qū)別?ESP32-WROOM-32 后綴字母代表的意思是?

評論