1.简介
基于FireBeetle ESP32-E水质监控系统,监测浊度和温度两项数据并上传到onenet云平台,FireBeetle ESP32-E是一款基于ESP-WROOM-32E双核芯片的主控板,它专为IoT设计。支持WIFI和蓝牙双模通信,并板载充电电路。
这款开发板还支持低功耗模式,通过Arduino编程即可支持,适合在使用电池供电的场合。在IOT环境,通常没有供电条件,低功耗模式就非常有必要。
2硬件
2.1接线图
用到的IO口如下图,IO17连接DS18B20,IO16连接浊度传感器。
2.2浊度传感器
浊度传感器SEN0189,通过测量水的污浊程度来判断所洗物品洁净程度,传感器内部是一对红外线对管,当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。光接收端把透过的光强度转换为对应的电流大小,透过的光多,电流大,反之透过的光少,电流小。通过测量接收端电流的大小,就可以计算出水的污浊程度。
3.程序说明
3.1初始化函数
以下函数分别初始化串口,wifi,定时器,io口工作模式,ds18b20,串口的波特率设置为115200。DS18B20需要将信号引脚接4.7K上拉电阻,但是ES32的IO口可以设置为弱上拉模式,如果初始化为输入引脚,悬空为低电平,设置为上拉输入可以即可不外接电阻。设定定时器,10S发送一次数据。
void setup()
{
Serial.begin(115200); //初始化串口
delay(3000); //延时
setupWifi(); //调用函数连接WIFI
client.setServer(mqtt_server, 6002); //设置客户端连接的服务器,连接Onenet服务器, 使用6002端口
client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息
client.setCallback(callback); //设置好客户端收到信息是的回调
tim1.attach(10, sendTempAndHumi); //定时每10秒调用一次发送数据函数sendTempAndHumi
pinMode(17,INPUT_PULLUP);
pinMode(16,INPUT_PULLUP);
sensors.begin();// 初始库
}
3.2数据发送函数
读取到温度后将数据传入json格式字符串中。
void sendTempAndHumi()
{
if (client.connected())
{
sensors.requestTemperatures(); // 发送命令获取温度
snprintf(msgJson, 40, dataTemplate, sensors.getTempCByIndex(0), digitalRead(16)); //将模拟温度浊度数据套入dataTemplate模板中, 生成的字符串传给msgJson
json_len = strlen(msgJson); //msgJson的长度
msg_buf[0] = char(0x03); //要发送的数据必须按照ONENET的要求发送, 根据要求,数据第一位是3
msg_buf[1] = char(json_len >> 8); //数据第二位是要发送的数据长度的高八位
msg_buf[2] = char(json_len & 0xff); //数据第三位是要发送数据的长度的低八位
memcpy(msg_buf + 3, msgJson, strlen(msgJson)); //从msg_buf的第四位开始,放入要传的数据msgJson
msg_buf[3 + strlen(msgJson)] = 0; //添加一个0作为最后一位, 这样要发送的msg_buf准备好了
Serial.print("public message:");
Serial.println(msgJson);
client.publish("$dp", (uint8_t *)msg_buf, 3 + strlen(msgJson)); //发送数据到主题$dp
}
}
3.3主函数
主函数如下,检测wifi是否连接成功,然后检测是否成功连接onenet。
上传数据是通过定时器发送。
void loop()
{
if (!WiFi.isConnected()) //先看WIFI是否还在连接
{
setupWifi();
}
if (!client.connected()) //如果客户端没连接ONENET, 重新连接
{
clientReconnect();
}
client.loop(); //客户端循环检测
}
4.实物调试
数据上传云平台,同时通过串口打印到串口上位机,通过改变温度和调节浊度传感器,可以看到数据的变化,通过云平台,可以看到数据变化,温度传感器是两位浮点数,浊度传感器是数字量的数值。
5.总结
通过arduino平台,可以快速开发ESP32,开源资料丰富,对很多底层通信协议可以直接调用,大大节约了开发时间。