【FireBeetle Board-ESP32评测报告之二】温度上送物联网OLED显示
【FireBeetle Board-ESP32评测报告之二】温度上送物联网及OLED本地显示【上期回顾】
【FireBeetle Board-ESP32评测报告之一】开箱并驱动oled我们已经建立了FireBeetle Board-ESP32专属的IDE,并且已经玩了一个blink(硬件界的helloworld),并且驱动了一片iic接口的OLED。本期我们做一个小小的温度物联网应用。将本地采集的数据上送至物联网,同时也在本地做一个显示系统。技术都很简单,代码和接线全部得到沧海的验证。大约一小时就可以搭建这样一个物联网应用。我们一起来做吧。
【本期用到的硬件】1、FireBeetleBoard-ESP321块2、LM35 温度传感器 1只(淹没在杜邦线里面了)3、OLED 液晶显示器 1只(ssd1306驱动 ,IIC接口)4、LED(全彩) 1只5、杜邦线若干6、小面包板 2块 【本期用到的软件】1、arduinoideforesp3266(dfrobot 官方,萤火虫专用,v0.04)2、mqtt库PubSubClient.h3、oled库ACROBOTIC_SSD1306.h4、tlink.io的设备以及ID申请。这个在我以前的帖子里搜吧。或者直接去tlink.io官网。你也许有自己熟悉的物联网应用,那么稍加替换即可。切记,咱们用的是MQTT协议。
【接线及代码】
FireBeetle Board-ESP32LM35OLEDLED
A0DATA OUTPUT(面对丝印,中间的pin )
VCC(实测4.33V,标称5V)VCC(面对丝印,左边pin)
GNDGND(面对丝印,右边pin)GNDGND
3V3
VCC
SCL(I022)
SCL
SDA(I021)
SDA
D3(IO26)
GREEN
代码借鉴了Basic ESP8266 MQTT example
<div align="left">/*
*2017-05-29
*采用FireBeetle Board-ESP32板,lm35接入,mqtt协议测试
*序列号:请用您申请到的设备序列号,个人用户是免费的
*json格式:{"sensorDatas":[{"value":23.04}]}
*上送间隔:20S
*LED D3显示上送过程,闪动一次上送一次
*oled显示连接过程以及温度的本地显示
*测试FireBeetle Board-ESP32,it works
*/
#include <WiFi.h>
#include <PubSubClient.h>
// configure the following values as neccesary
const char* ssid = "your ssid";
const char* password = "your psw";
const char* mqtt_server = "mqtt.tlink.io";
//const char* mqtt_username = "";
//const char* mqtt_password = "";
const char* mqtt_topic = "your tlink id";
//关于LM35变量*************温度传感器部分设置
int potPin = A0; //设置模拟口A0为LM35的信号输入端口
float temperature = 0; //设置temperature为浮点变量
long val=0; //设置val为长整数变量
//*********关于连接的管理
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10*2000; // delay between 2 datapoints, 20s
//关于oled的设置
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
unsigned char brightness = 255;
//配置wifi客户端以及mqtt客户端
WiFiClient espClient;
PubSubClient client(espClient);
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
char mypl;
Serial.println(length);
memcpy(mypl,payload,length);
mypl=char(0);
Serial.print("receive: ");
Serial.print(topic);
Serial.print("->");
Serial.println(mypl);
}
void setup()
{
Serial.begin(115200);
delay(500);
pinMode(D3, OUTPUT); //用于显示数据上送
Wire.begin();
oled.init();
oled.clearDisplay();
oled.setBrightness((unsigned char)brightness);
// We start by connecting to a WiFi network
Serial.println(); </div><div align="left"> Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("");
oled.setTextXY(3,4);
oled.putString("WiFi OK");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
client.setServer(mqtt_server, 1883);//连接MQTT服务器
}
void loop()
{
val=analogRead(potPin);//温度传感器LM35接到模拟PIN0上;val变量为从LM35信号口读取到的数值
if((millis() - lastConnectionTime > postingInterval)) {
temperature = val*0.001409587904157*100;
//把读取到的val转换为温度数值,系数一:0.001220703125=5/4096,0~5V对应模拟口读数
//但是实测了vcc的电压为4.33V,因此对照UNO做了一个校正,选择系数一:0.001220703125*5/4.33=0.001409587904157
//1~4096,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
sendData(temperature);
}
delay(500);
reconnect();
client.loop();
}
void sendData(float thisData) {
String msg ="{\"sensorDatas\":[{\"value\":";//mqtt head
char s_temp;
dtostrf(thisData,2,2,s_temp);//把温度值转换为两位整数,两位小数的字符串
msg+= s_temp;
msg+=" }] }";//结束符,具体在tlink中API定义
char mqttmsg;
msg.toCharArray(mqttmsg,40); //Copies the string's characters to the supplied buffer.
delay(1000);
//发布一组数据,标题是设备序列号,内容是json格式的传感器数据
client.publish(mqtt_topic,mqttmsg);
lastConnectionTime = millis();
Serial.println(mqttmsg);
oled.setTextXY(6,4);
oled.putString(s_temp);//oled本地显示温度数据
digitalWrite(D3, HIGH); // LED D3闪动,显示数据上送
delay(1000);
digitalWrite(D3, LOW);
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ESP32Client")) {
Serial.println("connected");
oled.setTextXY(5,4);
oled.putString("MQTT OK");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 500 ms");
// Wait 5 seconds before retrying
delay(500);
}
}
}</div>
(图中数据突变部分,是我认为用手指触碰LM35后的变化)【小结】1、本次测试采用的是FireBeetleBoard-ESP32板V0.3,非最新版本,在连接wifi时,成功率非100%,我想可能性较大的是硬件版本问题。随着V1.0版推出,将做进一步测试。并且及时报告连接情况。
2、连接后,运行很稳定,FireBeetleBoard-ESP32板----tlink.io物联网站,跑了15个小时,没有发生中断,连接稳定。散热罩发热情况尚可。已经建议ANDY师兄考虑对ESP32散热的进一步改进。
本期我们探索了esp32的蓝牙应用,下期咱们一起看看BLE的情况吧。库来自github.com,您在使用和传播时注意版权,尊重其原作者权益。
{:5_190:}想玩ESP32~期待~ 先收藏了, 过一阵也研究一下 正在努力学习ESP32中,帖子收藏了 楼主,请问您是否有加入deep sleep功能?
页:
[1]