15876浏览
查看: 15876|回复: 4

【FireBeetle Board-ESP32评测报告之二】温度上送物联网OLED显示

[复制链接]
【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块
温度上送oled.jpg
【本期用到的软件】
1Arduino  ide  foresp3266dfrobot 官方,萤火虫专用,v0.04
2mqttPubSubClient.h
3oledACROBOTIC_SSD1306.h
4tlink.io的设备以及ID申请。这个在我以前的帖子里搜吧。或者直接去tlink.io官网。你也许有自己熟悉的物联网应用,那么稍加替换即可。切记,咱们用的是MQTT协议。



【接线及代码】
  
FireBeetle Board-ESP32
  
LM35
OLED
LED
A0
DATA OUTPUT(面对丝印,中间的pin


VCC(实测4.33V,标称5V
VCC(面对丝印,左边pin


GND
GND(面对丝印,右边pin
GND
GND
3V3

VCC

SCLI022

SCL

SDAI021

SDA

D3IO26


GREEN


代码借鉴了Basic ESP8266 MQTT example


  1. <div align="left">/*
  2. *  2017-05-29
  3. *  采用FireBeetle Board-ESP32板,lm35接入,mqtt协议测试
  4. *  序列号:请用您申请到的设备序列号,个人用户是免费的
  5. *  json格式:{"sensorDatas":[{"value":23.04}]}
  6. *  上送间隔:20S
  7. *  LED D3显示上送过程,闪动一次上送一次
  8. *  oled显示连接过程以及温度的本地显示
  9. *  测试FireBeetle Board-ESP32,it works
  10. */
  11.   
  12. #include <WiFi.h>
  13. #include <PubSubClient.h>  
  14.   
  15. // configure the following values as neccesary
  16. const char* ssid     = "your ssid";
  17. const char* password = "your psw";
  18. const char* mqtt_server = "mqtt.tlink.io";
  19. //const char* mqtt_username = "";
  20. //const char* mqtt_password = "";
  21. const char* mqtt_topic = "your tlink id";
  22. //关于LM35变量*************温度传感器部分设置
  23. int potPin = A0;                     //设置模拟口A0为LM35的信号输入端口
  24. float temperature = 0;                //设置temperature为浮点变量
  25. long val=0;                       //设置val为长整数变量
  26. //*********关于连接的管理
  27. unsigned long lastConnectionTime = 0;          // last time you connected to the server, in milliseconds
  28. const unsigned long postingInterval = 10*2000; // delay between 2 datapoints, 20s
  29. //关于oled的设置
  30. #include <Wire.h>
  31. #include <ACROBOTIC_SSD1306.h>
  32. unsigned char brightness = 255;
  33. //配置wifi客户端以及mqtt客户端
  34. WiFiClient espClient;
  35. PubSubClient client(espClient);
  36.   
  37. void callback(char* topic, byte* payload, unsigned int length) {
  38.   // handle message arrived
  39.   char mypl[48];
  40.   Serial.println(length);
  41.   memcpy(mypl,payload,length);
  42.   mypl[length]=char(0);
  43.   Serial.print("receive: ");
  44.   Serial.print(topic);
  45.   Serial.print("->");
  46.   Serial.println(mypl);
  47. }
  48.   
  49.   
  50. void setup()
  51. {
  52.     Serial.begin(115200);
  53.     delay(500);
  54.    pinMode(D3, OUTPUT); //用于显示数据上送
  55.     Wire.begin();  
  56.     oled.init();                     
  57.     oled.clearDisplay();            
  58.     oled.setBrightness((unsigned char)brightness);
  59.    // We start by connecting to a WiFi network
  60.     Serial.println(); </div><div align="left">    Serial.println();
  61.     Serial.print("Connecting to ");
  62.     Serial.println(ssid);
  63.     WiFi.begin(ssid, password);
  64.     while (WiFi.status() != WL_CONNECTED) {
  65.         delay(1000);
  66.         Serial.print(".");
  67.     }
  68.     Serial.println("");
  69.     oled.setTextXY(3,4);
  70.     oled.putString("WiFi OK");
  71.     Serial.println("WiFi connected");
  72.     Serial.println("IP address: ");
  73.     Serial.println(WiFi.localIP());
  74.     client.setServer(mqtt_server, 1883);//连接MQTT服务器
  75.    
  76.   }
  77.   
  78. void loop()
  79. {
  80.    val=analogRead(potPin);//温度传感器LM35接到模拟PIN0上;val变量为从LM35信号口读取到的数值
  81.      if((millis() - lastConnectionTime > postingInterval)) {
  82.       temperature = val*0.001409587904157*100;
  83.          //把读取到的val转换为温度数值,系数一:0.001220703125=5/4096,0~5V对应模拟口读数
  84.         //但是实测了vcc的电压为4.33V,因此对照UNO做了一个校正,选择系数一:0.001220703125*5/4.33=0.001409587904157
  85.         //1~4096,系数二:100=1000/10,1000是毫伏与伏的转换;10是每10毫伏对应一度温升。
  86.       sendData(temperature);
  87.    
  88.   }
  89.     delay(500);
  90.     reconnect();
  91.   
  92.   client.loop();
  93. }
  94.   
  95. void sendData(float thisData) {
  96.       String msg =  "{"sensorDatas":[{"value":";  //mqtt head
  97.       char s_temp[5];
  98.       dtostrf(thisData,2,2,s_temp);//把温度值转换为两位整数,两位小数的字符串
  99.       msg+= s_temp;
  100.       msg+=" }] }";//结束符,具体在tlink中API定义
  101.       char mqttmsg[40];
  102.       msg.toCharArray(mqttmsg,40); //Copies the string's characters to the supplied buffer.
  103.       delay(1000);
  104. //发布一组数据,标题是设备序列号,内容是json格式的传感器数据
  105.   client.publish(mqtt_topic,mqttmsg);
  106.   lastConnectionTime = millis();
  107.   Serial.println(mqttmsg);
  108.    oled.setTextXY(6,4);
  109.    oled.putString(s_temp);  //oled本地显示温度数据
  110.   
  111.   digitalWrite(D3, HIGH);   // LED D3闪动,显示数据上送
  112.   delay(1000);                    
  113.   digitalWrite(D3, LOW);   
  114.   
  115. }
  116. void reconnect() {
  117.   // Loop until we're reconnected
  118.   while (!client.connected()) {
  119.     Serial.print("Attempting MQTT connection...");
  120.     if (client.connect("ESP32Client")) {
  121.       Serial.println("connected");
  122.       oled.setTextXY(5,4);
  123.       oled.putString("MQTT OK");  
  124.     } else {
  125.       Serial.print("failed, rc=");
  126.       Serial.print(client.state());
  127.       Serial.println(" try again in 500 ms");
  128.       // Wait 5 seconds before retrying
  129.       delay(500);
  130.     }
  131.   }
  132. }</div>
复制代码
温度上送_串口助手.PNG
温度上送之图形.PNG
(图中数据突变部分,是我认为用手指触碰LM35后的变化)
【小结】
1、本次测试采用的是FireBeetleBoard-ESP32V0.3,非最新版本,在连接wifi时,成功率非100%,我想可能性较大的是硬件版本问题。随着V1.0版推出,将做进一步测试。并且及时报告连接情况。

2、连接后,运行很稳定,FireBeetleBoard-ESP32----tlink.io物联网站,跑了15个小时,没有发生中断,连接稳定。散热罩发热情况尚可。已经建议ANDY师兄考虑对ESP32散热的进一步改进。

本期我们探索了esp32的蓝牙应用,下期咱们一起看看BLE的情况吧。
库来自github.com,您在使用和传播时注意版权,尊重其原作者权益。
pubsubclient-master.zip (36.81 KB, 下载次数: 247)

nicho  中级技匠

发表于 2017-5-29 14:53:13

想玩ESP32~  期待~
回复

使用道具 举报

饶厂长  初级技匠

发表于 2017-5-29 15:00:00

先收藏了, 过一阵也研究一下
回复

使用道具 举报

flashyidea  高级技师

发表于 2018-3-9 07:32:00

正在努力学习ESP32中,帖子收藏了
回复

使用道具 举报

DFSyrPga1if  学徒

发表于 2018-4-10 14:15:01

楼主,请问您是否有加入deep sleep功能?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail