查看: 8388|回复: 4

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

[复制链接]
本帖最后由 沧海笑 于 2017-5-29 11:22 编辑

【FireBeetle Board-ESP32评测报告之二】温度上送物联网及OLED本地显示
【上期回顾】

我们已经建立了FireBeetle Board-ESP32专属的IDE,并且已经玩了一个blink(硬件界的helloworld),并且驱动了一片iic接口的OLED
本期我们做一个小小的温度物联网应用。将本地采集的数据上送至物联网,同时也在本地做一个显示系统。
技术都很简单,代码和接线全部得到沧海的验证。大约一小时就可以搭建这样一个物联网应用。我们一起来做吧。
【本期用到的硬件】
2LM35 温度传感器   1只(淹没在杜邦线里面了)
3OLED 液晶显示器   1只(ssd1306驱动 IIC接口)
4LED(全彩)       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


[C++] 纯文本查看 复制代码
/*
*  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(); [/font][/align][align=left][font=宋体]    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);
    }
  }
}

温度上送_串口助手.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, 下载次数: 32)

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功能?
回复 支持 反对

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

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

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

mail