自己学习ESP8266好久了,从AT指令集到SDK到lua开发也都学习了很多方法。想要切实的完成一个物联网作品大致需要几部分:MCU控制程序+ESP8266开发+服务器选择搭建+app程序设计
对于和我一样的小白而言,可能只对其中一部分比较了解,譬如说我仅仅了解MCU的设计编程,对于服务器和app基本掌握的知识为0.这时想要快速完成一个物联网小产品就成了一件很难的事情。
所以我将给大家提供一种我在学习过程中发现的一种最简单的方法,仅需3小时。就能完成一个简单的物联网设备。
这里我用我的项目举例子! 我要完成的任务是,做一个远程的温度检测报警系统。
mcu涉及到的功能是,点灯,蜂鸣器,测温(这里我用的不是DS18B20,是一种非接触式的红外温度传感器MLX90614)
说了要做最简单的,所以我MCU选用51单片机。wifi模块选用ESP8266,服务平台选择iotechn。
IOTECHN网站,登陆后先注册一个账号。
然后点击添加设备
输入你设备的名字和密码,名字呢最好不要出现中文也不要用特殊字符,密码按照你的心情设置就行了,点击确定。你就会发现你设备的名字出现在下方。
其中包括几个重要的地方,
1secretkey 这是之后8266和你设备连接的重要秘钥;
2添加/查看命令 通过这个操作可以操作单片机
3添加/查看参数 通过这个操作单片机可以将参数反馈给8266和服务器
知道这些之后我们就开始设定一些我们想要的参数吧。
还记的我要完成的任务么,1开关灯 2开关蜂鸣器 3反馈温度。 这个任务里面其实就两部分 一个是让8266告诉51单片机该做什么,一个是让51单片机把检测到的数值发送给我们可爱的8266。所以我们要添加命令和参数。
这里会出现三个可以填写信息的地方 譬如说我要完成开灯这件事情,那么我就就如下输入
其中命令是以十六进制的报文的形式传送给单片机的,因为有帧头和帧尾所以大家尽量不要把命令设置的太复杂,这里我就用了一位字符表示(注意:这个1是字符1而不是数字1,一会写单片机程序的时候可以体会到)
将我所有的命令都依次输入确定后 可以点击查看命令
这些就是我所有要发送给单片机的数据信息了O(∩_∩)O
然后添加一个参数 并查看 这里注意 name是编程时候要用到的 一会再说
现在呢我们服务器的参数就设置好了。
同时这个服务器是直接连接在微信上的,大家打开微信搜索公众号 iotechn控制器
关注后点击添加设备,会让你扫描一个二维码,打开你的iotechn网页上找到二维码选项,扫描后就会出现你的设备
然后进入到你的设备里 就会出现你设置的命令
到这里 你的手机已经可以通过微信和服务器连接了。目前为止你是不是只用了半个小时呢?好的,还有两个半小时!
这里要用到两个工具,固件烧录工具烧录工具点击下载和串口工具
同时,大多数同学可能只用过AT指令集开发,所以可能没有注意到8266有一个下载模式,查看8266的数据手册
这个下载模式是进行固件烧录的时候用的。固件是做什么的呢,顾名思义就是固定在8266里的程序,之前我们用的AT指令集就是一个AT固件。
因为我们要烧录一个新的固件所以大家要焊接一个新的电路,能够控制gpio的状态。这是我的电路图
接下来我们要进行SDK开发。这是SDK开发包下载地址。对于不懂SDK开发的小伙伴先不要着急,这个包里已经配置好对应的bin文件,我们直接烧录bin文件就好了。SDK开发我们可以以后慢慢学习。
在下面这个路径下可以找到对应的bin文件
/iot-esp8266/ESP8266_NONOS_SDK/bin
/iot-esp8266/esp8266_mqtt/bin/upgrade
会在bin下面有一个 user1.1024.new.2.bin 这是用户唯一的文件,其他的都使用官方的bin文件。配置地址如下
C:\develop\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\ESP8266_NONOS_SDK\bin\boot_v1.6.bin 地址0x00000
C:\develop\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\esp8266_mqtt\bin\upgrade\user1.1024.new.2.bin 地址0x01000
C:\develop\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\ESP8266_NONOS_SDK\bin\esp_init_data_default.bin 地址 0xfc000
C:\develop\AiThinkerIDE_V0.5\cygwin\home\aithinker\project\ESP8266_NONOS_SDK\bin\blank.bin 地址 0xfe000
打开我们下载好的固件烧录软件
其中需要我们配置的有几部分 首先是上面绿的部分需要打钩并将bin文件地址和烧录地址按上面我的配置地址填入。
然后中间部分的选项有三个比较重要 1.flash size 需要按照你手上eso8266型号调整,不同型号的内存大小不同产看数据手册就能知道自己的型号内存大小了。2.spimode 和你电脑驱动有关,如果烧录不进去 可以试着调整这个选项 3.其次是你的波特率,一般来说新到手的8266波特率会有三种 9600 115200 或者144000 之前用过AT指令的同学 一定不会不知道自己的波特率吧。
上面的选项设置好之后直接点start是下载不进去的,因为刚才我们提到了下载模式,所以要先把gpio0拉低,然后点击start 这个时候就可以把固件烧录完成了。
到此8266的配置完成了一半,接下来我们要让8266连接上我们的热点和设备
这个时候我们要打开串口助手,并将gpio悬空进入工作模式
注意:我们的串口助手最好选用自带输入新行功能的,因为我们要发送一个带有回车的字符串。但回车在不同系统下不兼容,对于单片机编程一会也要注意这点 具体区别可以看我这篇文章串口和发送新行不同系统下的区别
这是我的串口工具 带有发送新行的串口助手 提取码hqqe
接下来要输入 set wifi 你的ssid 你的wifi密码\r\n 中间只能有一个空格。
set mqtt “your scretKey” “name” “pwd”\r\n 中间只能有一个空格。
sretkey是刚才在iotechn网站上自动生成的 name 和pwd是你设置的设备名称
做完这两部,就配置完成了,重启模块之后,我们输入show命令
到此为止 8266的设置已经完成
到此已经过去了一个小时,不急我们还有两个小时呢!所以可以喝杯茶冷静一下 刚才一共做了几件事?
我的51单片机是5v 而8266是3.3v 所以无法直接连接进行通信。大家可以产看我这篇文档5v与3.3v串口通信
在这里贴出我的电路原理图
我有理由相信大家对单片机的编程十分过关。
我直接贴上我的程序点此下载 提取码2e16
这里要说一下报文格式,根据我刚才设置的命令参数,我在手机app上按下各个按键的时候收到的返回值是这样的
所以我接受报文的时候程序作出了如下调整
if(RI_flag)
{
for(i=0;i<15;i++)
{
if(UsartReceive[i]=='$'&&UsartReceive[i+4]=='}')
{
switch(UsartReceive[i+5])
{
case 0x31:P1=0;break;
case 0x32:P1=0xff;break;
case 0x33:P2_3=0;break;
case 0x34:P2_3=1;break;
case 0x35:TI_flag=1;break;
case 0x36:TI_flag=0;break;
}
}
}
还记的刚才我说的命令是字符型的么? 所以这里我命令中设置的1正式其ascll码 0x31或者直接写成case '1':
都是可以的
同时如果想让单片机发送温度参数的时候需要发送如下报文
param tem 正文 这里的tem是刚才设置的参数的name
对此我代码中只这样发送的
if(TI_flag)
{
TI_flag=0;
temperature=temperature_read();
ES=0;
TI=1;
printf("param tem %4.2f°C\n",temperature);
while(!TI);
TI=0;
ES=1;
}
要注意的是 param 后面 tem后面都要加一个空格。 且上面我也说道了,要注意/r/n的使用。这里我们使用/n就可以了。
如果你对单片机的操作很熟练 或者你的项目并不是很复杂的话,我认为可能你对单片机程序只需要一个小时就能完成。现在来看,你已经学会了一种物联网的接入方法了是吧O(∩_∩)O
最后我就能通过手机控制led灯 蜂鸣器 并能显示温度数据了
这里贴出我的邮箱[email protected] 希望大家共同讨论学习