ESP32(arduino)和声音传感器数据采集并实现连接WiFi进行MQTT通信
ESP32(arduino)和聲音傳感器數據采集并實現連接WiFi進行MQTT通信
簡單物聯網應用——基于老人居家聲音監測系統
使用 WiFi 庫, 創建 WiFiClient 對象, 引用 WiFiClient 類, 通過 begin()函數初始化 WiFi
連接, 通過判斷 status() 的值來確認 WiFi 是否連接成功, 如果成功, 則開始執行下一步程
序, 未連接則延時 500ms 后重新連接, 直到連接成功, 具體的程序如下:
使用 PubSubClient 庫, 創建 PubSubClient 對象, 引用 Client 類, 通過 setServer()函數初12
始化 MQTT 的 Client 連接, 通過判斷 connect() 的值來確認 MQTT 是否連接成功, 如果成
功, 則開始執行下一步程序, 未連接則延時 2000ms 后重新連接, 直到連接成功, 具體的程
序如下:
(2)MQTT 發送:
通過定義一個帶參數的 send()函數來實現數據發送, 主要使用了 StaticJsonBuffer 中的
createObject()和 PubSubClient()中的 publish()兩個函數進行 json 數據的創建、 賦值以及發送
功能, 具體的程序如下:
(3)數據采集主要使用了 ESP32 的 ADC_1、 CHANNL_6 即 ESP32 的 34 號引腳來讀取聲
音傳感器的模擬量輸出引腳的值并進行轉換。 在 ESP32 中, ADC 的數據劃分成了 4096 份,
則區間為 0~4095, 經過測試, 根據使用場景的不同, 在這里閾值上限設置為 4000、 下限為
500, 并且引用信號量機制, 保證當 ADC 數值超過 4000 時或低于 500 時傳感器向云端發送
一條 json 數據, 主循環函數如下:
完整代碼:
#include <ArduinoJson.h> #include <WiFi.h> #include <PubSubClient.h>const char* ssid = "infinite"; const char* password = "password"; const char* mqttServer = "192.168.43.188"; const int mqttPort = 1883; const char* mqttUser = ""; const char* mqttPassword = ""; const int SOUND_PIN = 34; char* get_data; int get_time=0; int get_value; int flag=0; WiFiClient espClient; PubSubClient client(espClient);void setup() {Serial.begin(115200);Serial.println();WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.println("Connecting to WiFi..");}Serial.println("Connected to the WiFi network");client.setServer(mqttServer, mqttPort);while (!client.connected()) {Serial.println("Connecting to MQTT...");if (client.connect("ESP32Clientkitchen", mqttUser, mqttPassword )) {Serial.println("connected");} else {Serial.print("failed with state ");Serial.print(client.state());delay(2000);}}}void send(char* get_data,int get_time,int get_value){StaticJsonBuffer<300> JSONbuffer;JsonObject& JSONencoder = JSONbuffer.createObject();JSONencoder["device"] = "kitchen";JSONencoder["sensorType"] = "voice";JSONencoder["get_data"] = get_data;JSONencoder["get_time"] = get_time;JSONencoder["get_value"] = get_value;//JsonArray& values = JSONencoder.createNestedArray("values");//values.add(20);//values.add(21);//values.add(23);char JSONmessageBuffer[100];JSONencoder.printTo(JSONmessageBuffer, sizeof(JSONmessageBuffer));Serial.println("Sending message to MQTT topic..");Serial.println(JSONmessageBuffer);if (client.publish("esp/test", JSONmessageBuffer) == true) {Serial.println("Success sending message");} else {Serial.println("Error sending message");}client.loop();Serial.println("-------------");delay(1000); }void loop() {get_value = analogRead(SOUND_PIN);if(get_value>4000&&flag==0){get_data="open";get_time++;send(get_data,get_time,get_value);flag=1;delay(100);}if(get_value<500&&flag==1){get_data="close";get_time++;send(get_data,get_time,get_value);flag=0;} }總結
以上是生活随笔為你收集整理的ESP32(arduino)和声音传感器数据采集并实现连接WiFi进行MQTT通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Matlab路径规划】蚁群算法机器人大
- 下一篇: 情人节送ta一朵独一无二的玫瑰花