视觉℡ 发表于 2018-12-8 15:33:26

FYU43T4827+ESP8266制作气象站(支持自动识别地区)

相信很多小伙伴都见过使用ESP8266+OLED液晶制作的微型气象站,但是编程比较麻烦,液晶面积太小,可是你见过使用ESP8266+4.3寸彩色液晶制作的气象站吗?


准备材料:

ESP8266 * 1(原厂AT固件)
FYU43T4827液晶一块(目前正在做活动,仅需49元 )

思路:FYU43T4827液晶具有串口主动发数据的能力,只需要液晶向串口发送AT指令即可控制ESP8266联网获取天气数据。

测试一下ESP8266 AT指令
1) 设置 wifi 模式:
  AT+CWMODE=3 //设置为 softAP+station 共存模式
  响应:OK
2) 重启生效
  AT+RST
  响应:OK
3) 连接路由
  AT+CWJAP="ssid","password" // 传入路由的ssid 和 password
  响应:OK
4) 查询设备IP
  AT+CIFSR
  响应:192.168.3.106 //返回设备的 IP 地址
5) 设备连接服务器
  AT+CIPSTART="TCP","139.129.153.247",80 //传入协议、服务器 IP、端口号
  响应:OK
6) 转换成单点连接
       AT+CIPMODE=1
    响应:OK
7) 改为透传模式
      AT+CIPSEND
   响应:OK
   >
注意:多了一个 “>”,表示已经进入透传模式
8) 发送数据(请求地址为我自己搭建的服务器,并且已经整合过天气数据,只需要调用即可,需要PHP代码的通讯请访问
http://bbs.feelelec.cn/thread-111-1-1.html)
这里需要一点点HTTP的知识,我们将ESP8266伪装成一个浏览器,所以要加入“请求头”一定要安装我的请求头写,搞了很久才搞出来的。
GET /api/tianqi.php HTTP/1.1
api-key: xUrvOCDB=iRuS5noq9FsKrvoW=s=
Host:feelsight.cn



注意:结束需要有"\r\n\r\n"   两个哦,代表结束符
/api/tianqi.php是请求的详细地址
feelsight.cn是请求域名

响应:
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 08 Dec 2018 03:21:45 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.4.45


7a
WTime.txt="2018/12/08 09-01-00"
WCity.txt="郑州市"
Wwtyp.txt="多云"
WHtemp.txt="高温 0.0℃"
WLtemp.txt="低温 -6.0℃"


0


好了,有数据了就开始我们的液晶模块编程了

这是我们的大致界面,不会编写界面的同学可以观看我们的视频教程:http://bbs.feelelec.cn/mp4/index.html




第一步:页面初始化前需要先将串口回显给关掉,要不然液晶向ESP8266模块发送数据时,ESP8266会返回”OK“指令,OK指令对于液晶模块来说是不识别的,然后液晶模块会返回0X00 0X0D 0X0A,这一条数据ESP8266模块又不认,就会返回ERROR,结果。。。液晶模块和ESP8266他们两个就干上了,不断互相发数据,所以必须将液晶模块的回显给关闭”bkcmd=0“
第二步:ESP8266上电瞬间会有一部分数据输出,和等待连接WIFI,所以我们需要将定时器延时10秒钟,然后再发送数据,
timer0.tim=10000   //设定定时器时间
timer0.en=1    //=使能定时器
var0.val=1    //状态机标志位

第三步:开始写我们的任务状态机,由于串口需要发送\r\n   "等特殊字符串,所以我们改为十六进制发送数据,防止液晶解析不正常
if(var0.val==1)
{
timer0.tim=1000
//连接服务器 指令
readh 41 54 2B 43 49 50 53 54 41 52 54 3D 22 54 43 50 22 2C 22 31 30 34 2E 32 32 34 2E 31 34 38 2E 39 34 22 2C 38 30 0D 0A
var0.val=2
}else if(var0.val==2)
{
//转换成单点连接
readh 41 54 2B 43 49 50 4D 4F 44 45 3D 31 0D 0A
var0.val=3
}else if(var0.val==3)
{
//改为透传模式
readh 41 54 2B 43 49 50 53 45 4E 44 0D 0A
var0.val=4
}else if(var0.val==4)
{
var0.val=5
timer0.tim=2000//延时2秒等待接收到的天气数据
//发送我们的http请求
readh 47 45 54 20 2F 61 70 69 2F 74 69 61 6E 71 69 2E 70 68 70 20 48 54 54 50 2F 31 2E 31 0D 0A 61 70 69 2D 6B 65 79 3A 20 78 55 72 76 4F 43 44 42 3D 69 52 75 53 35 6E 6F 71 39 46 73 4B 72 76 6F 57 3D 73 3D 0D 0A 48 6F 73 74 3A 65 69 72 62 69 6F 2E 63 6E 0D 0A 0D 0A
}else if(var0.val==5)
{//开始更新图标显示信息
if(Wwtyp.txt=="晴")
{
    picBox1.pic=1
}else if(Wwtyp.txt=="多云")
{
    picBox1.pic=2
}else if(Wwtyp.txt=="阴")
{
    picBox1.pic=3
}else if(Wwtyp.txt=="雷阵雨")
{
    picBox1.pic=4
}else if(Wwtyp.txt=="小雨")
{
    picBox1.pic=5
}else if(Wwtyp.txt=="大雨")
{
    picBox1.pic=6
}
var0.val=4
timer0.tim=60000
}
本案例工程代码:http://bbs.feelelec.cn/forum-2-1.html








页: [1]
查看完整版本: FYU43T4827+ESP8266制作气象站(支持自动识别地区)