【FireBeetle Board-ESP32评测报告之二】温度上送物联网及OLED本地显示 
【上期回顾】  
我们已经建立了FireBeetle Board-ESP32专属的IDE,并且已经玩了一个blink(硬件界的helloworld),并且驱动了一片iic接口的OLED。 本期我们做一个小小的温度物联网应用。将本地采集的数据上送至物联网,同时也在本地做一个显示系统。 技术都很简单,代码和接线全部得到沧海的验证。大约一小时就可以搭建这样一个物联网应用。我们一起来做吧。  
【本期用到的硬件】 2、LM35 温度传感器   1只(淹没在杜邦线里面了) 3、OLED 液晶显示器   1只(ssd1306驱动 ,IIC接口) 4、LED(全彩)       1只 5、杜邦线若干 6、小面包板          2块 【本期用到的软件】 1、Arduino  ide  foresp3266(dfrobot 官方,萤火虫专用,v0.04) 2、mqtt库PubSubClient.h 3、oled库ACROBOTIC_SSD1306.h 4、tlink.io的设备以及ID申请。这个在我以前的帖子里搜吧。或者直接去tlink.io官网。你也许有自己熟悉的物联网应用,那么稍加替换即可。切记,咱们用的是MQTT协议。  
 
 
【接线及代码】
 |    FireBeetle Board-ESP32    |  |  |  |   | DATA OUTPUT(面对丝印,中间的pin )  |  
 |  
 |   |  |  
 |  
 |   |  |  |  |   |  
 |  |  
 |   |  
 |  |  
 |   |  
 |  |  
 |   |  
 |  
 |  |  
  
 
代码借鉴了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[48];
 -   Serial.println(length);
 -   memcpy(mypl,payload,length);
 -   mypl[length]=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[5];
 -       dtostrf(thisData,2,2,s_temp);//把温度值转换为两位整数,两位小数的字符串
 -       msg+= s_temp;
 -       msg+=" }] }";//结束符,具体在tlink中API定义
 -       char mqttmsg[40];
 -       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,您在使用和传播时注意版权,尊重其原作者权益。  
 |