总结一些这两天的学习内容。我最初的想法是将室内的温度通过ESP8266,连接网络发送到手机APP上,后来发现一直没有做物联网的APP有这个功能,之前学习贝壳物联的时候,发现它只能发送命令性质的代码给ESP8266,而ESP8266发送数据给他,他则没有相对应的组件去显示。直到最近发现点灯科技的Blinker有相对较为完备的组件,可以实现我最初的想法。于是就确定任务是通过ESP8266连接上blinker,再发送检测到的温度数据到blinker。
刚开始不会,手上只有一个ATK-ESP8266,于是上网找资料,怎样通过ESP8266连接上blinker。
功夫不负有心人,找到一篇博文,里面博主的处境和我一样,也只有一个ATK-ESP8266,但他成功的连上了blinker,而且有详细的步骤,下面是他的这篇博文的地址:
https://blog.csdn.net/wu568760312/article/details/104507011?utm_source=app
借助这篇博文,我成功接入blinker,在这里感谢这位博主。
在按照步骤下载Arduino IDE,在IDE内下载esp8266 package 报错的情况,下面的网址有对应的解决方法
https://www.arduino.cn/thread-76029-1-1.html
连接上后,可以通过手机APP发送指令和控制esp8266上的led灯。
之后我发现blinker给的代码里有控制数据组件的代码,所谓数据组件,就是显示esp8266发送的十进制数值的组件。
BlinkerNumber Number1("num-04u"); //新建一个数据组件,数据键名为num-04u
Number1.print(counter); //发送数据到这个组件
counter就是要显示的数值。那我现在只要将这个数值变成我实时的温度值就行。
我首先是通过STM32单片机,结合DS18B20测量出了当前温度,再将这个温度值通过32单片机的串口3发送给ESP8266的串口,ESP8266接收到数据后,将接收的值赋给counter,在通过函数
Number1.print(counter);
发送给blinker手机APP,显示出来。
以下是代码部分:
32单片机测量温度后存放在一个数组内,将这个数组发送给ESP8266.
while(1)
{
if(t%10==0) //每100ms读取一次
{
temperature=DS18B20_Get_Temp();
if(temperature<0)
{
LCD_ShowChar(30+40,150,'-',16,0); //显示负号
temperature=-temperature; //转为正数
}else LCD_ShowChar(30+40,150,' ',16,0); //去掉负号
LCD_ShowNum(30+40+8,150,temperature/10,2,16); //显示正数部分
LCD_ShowNum(30+40+32,150,temperature%10,1,16); //显示小数部分
shuzu[0]=temperature/10/10+'0'; //存放温度十位
shuzu[1]=temperature/10%10+'0'; //存放温度个位
Usart_SendString(USART3,shuzu); //发送温度数据给ESP8266
}
}
ESP8266也有相应的接收处理函数(代码很粗糙)
```python
void loop()
{
Blinker.run(); //运行blinker
if(Serial.available()>0)
{
delay(100);
comdata=Serial.readString(); //ESP8266读取串口数据
Serial.println(comdata); //串口打印接收到的数据
}
if( comdata == "28")
{
counter=28;
}
if( comdata == "29")
{
counter=29;
}
if( comdata == "30")
{
counter=30;
}
if( comdata == "31")
{
counter=31;
}
if( comdata == "32")
{
counter=32;
}
if( comdata == "33")
{
counter=33;
}
if( comdata == "34")
{
counter=34;
}
if( comdata == "35")
{
counter=35;
}
Number1.print(counter); //发送数据到Blinker
}
```
成功运行后的结果就是