本帖最后由 3guoyangyang7 于 2017-12-12 22:55 编辑
做了三天的东西,写了将近4天的文章,把技术的内容通过语言描述出来还是比本身做技术难得的多也要费时间的多。这也是对接天猫精灵的最后一篇了,如果各位没有硬件开发的环境或者手头上没有现成的wifi开发模块,如果手上有其他的只能设备,可以使用home-assistant这个国外的开源的智能家居系统来接入,具体怎么做,小狂没有特别关注,刚兴趣的可以谷歌搜一下 硬件这一块其实很简单,小狂还是比较擅长玩硬件的,本事就是搞硬件的出身,我们可以使用各种各样的带有wifi功能的芯片,正如我在开篇中说的我们可以使用CC3200,esp32,esp8266,甚至各种系列的wifi芯片与单片机,嵌入式合用都行。我们要做的也就只有三件事,第一联网、第二搭建http客户端,get或者post数据,第三,根据获取到的信息控制相应的设备。 小狂手上有esp8266,以前也做过固件包的开发,使用arduino,做个c++的开发,但是从来没使用过脚本解释语言lua进行过开发,以前也见有人玩过,就秉承着玩死人不偿命,不玩新鲜的就不过瘾的想法,决定使用lua进行开发。既然这么决定了,那么就开干,主要参考的文章如下https://esp8266.ru/esplorer,小狂使用的开发板是nodemcu v3,官方网站如下https://nodemcu.readthedocs.io/en/master/en/build/。要想做lua就要使用带有lua解释器的固件,所以就会包括编译器下载,固件编译,固件下载,然后编写程序,执行程序。 一、下载编译器
进入这个网站,https://esp8266.ru/esplorer/,找到这个地方,可以直接下载,
下载完成后双击红框中的内容就能打开
打开后的截图如下图所示,左边为代码书写区,右边为控制区。
这个编译器具体的使用方法可以参考下图红色框中的内容
这个还会用到,下边会说简单的用法,这里先放着。 二、固件编译
这个nodemcu固件的编译很有意思,官网上给出了以下几种编译方式
第一种是云编译,第二种是Docker 镜像编译,第三种是下载源码(https://github.com/nodemcu/nodemcu-firmware)构建linux编译环境自己编译,要是以前的小狂肯定会选择后两种,可操作性强啊,随时都可以编译,自己把控的多。但是死来想去这次玩不就是为了折腾吗,以前还真没接触过云编译,然后就尝试一下,打开后界面如下所示
只要输入邮箱就行,但是他mlgbb,我的163的邮箱根本不能用,幸亏哥的邮箱多,果断填了一个谷歌的邮箱,果然醒了,看来我泱泱大中华的163不行啊。填入邮箱后,我们选择主线编译,要问什么叫主线编译,去百度去,github的一些基本知识还是要有的
然后选择我们要编译的模块,这里有默认要编译的模块,默认编译的基础之上,下图中红色框内的内容一定要编译,其他内容自选,反正不同的应用不同的编译方式,大家自己酌情选择吧。
下边的这些选项我都选择了
一个是TLS和SSL 一个是开启调试,一个是支持fatfs的文件系统,做过单片机开发的我觉得应该都知道这个东西吧。再然后就是开始你的编译呗
小狂是个屌丝穷学生,并没有太多的钱可以捐献,如果手头有充裕就捐献一下吧,算是为了科技的发展贡献一点力量。这个等个十分八分去看看你的邮箱有没有接到固件就行了。
看到上图的内容就证明编译完了,然后下载下来,我们等待烧录就行了,至于这两个的区别,float比较大,支持小数和分数,integer比较小不支持,只支持整数。那我们就下载float吧 三、固件下载
固件下载的方式也有很多,我们使用nodemcu-flasher进行烧录,这个方式也比较简单下载地址在https://github.com/nodemcu/nodemcu-flasher,把其下载之后打开,出现如下的界面。你是32位系统就打开win32中的ESP8266Flasher,否则打开win64中的这个。
连接我们的开发板,然后选择固件
第一个红色框内是你要下载的固件,就是你刚才从邮箱下载的最后为float的bin文件,后边的的起始地址设为0就行。在advanced一栏设成如下图所示的就行
然后回到operation中选择你对应的端口号,点击flash就可以。
如果连接成功会出现下图的界面等待烧录完成。
四、编写lua脚本获取控制信息
前边也说过,这个脚本要实现的步骤可以分三步,第一步是联网,第二步是使用http get到数据,然后控制要控制的设备。我们的lua脚本分为两个,一个是init.lua,另外一个是httpclick.lua,这个默认上电执行的是init.lua,我们在init.lua中连接网路,在httpclick.lua中获取我们在服务器上保存的信息,然后控制响应的设备。Nodemcu所有固件的API可以从官方wiki得到https://nodemcu.readthedocs.io/en/master/en/modules/sjson/。 1、init.lua
标号1是配置wifi,填上你自己的wifi名和密码就行,2是连接到ssid所示的wifi,3是一个1s的定时,4是判断有没有获得IP如果获得了ip就走5打印ip地址,然后调用httpclick.lua的程序,否则就打印IP还没有分配,等待连接。 2、httpclick.lua
标号1为一个1秒定时,每隔1s从retrundata.php中获取一次数据,同时把上次灯的状态发送到这个retrundata.php中存起来,等待查询。3是从str所指的url中get数据,4为把得到的sjson数据解码,5所实现的功能就是判断当前的id是否正确,如果正确就根据接收到的灯的动作设置灯,如打开关闭,设置灯的亮度等,然后保存当前灯的状态。 五、服务器端接收保存和读取文件
其实上边的1234已经完成了硬件篇所有的功能,这里还要说一下这个,是因为这部分也很重要,我们常用的http协议是不保存数据的,也就是说一次通信只是用来传输数据,无论是post还是get都会传送一次数据得到一次数据,我们为了让天猫精灵能正确的查询状态,正确控制设备,我们需要把协议解析出来的状态和设备返回的状态保存到服务器。主要通过下面这些文件来完成 1、getcontrol.php
这个文件是天猫精灵把解析到的数据,ID,action和value写入到Lamp.txt文件中,供硬件设备读取。
2、returndata.php
这个文件主要是与硬件设备进行沟通,实现两个功能,第一个功能接收硬件设备发送上来的设备消息然后写入到Lampstatue.txt中,供天猫平台的读取,另外一个就是读取Lamp.txt中的信息,用来控制自身的设备,如灯等。
3、returnstatue.php
这个是天猫精灵用于读取硬件状态的接口文件,主要是用来读取Lampstatue.txt的数据来返回当前设备的状态
所以的文件都已经解释完了,这种读写的方式在真正的应用中并不可行,是需要数据库的支持的,所以小狂在这只是为了测试功能,做的并没有那么规范。只是验证了一个流程,抛个砖,希望引出来更多的玉。 结语
花了三天做了一个以前都没有接触过的东西,在这个系统里小狂估计最熟悉的就是esp8266了,其他的都是现学现卖,有什么错误的地方还是希望大家指正。写了四天的文档,总字数也在12000字左右了,图片也接近120张了,其实也挺累的。不图别的,就图以后有人找这方面的资料,可以有一个全面的参考,完事了,晚上回去睡个好觉,明天继续搞点新鲜的事情玩。 郑总声明:码字不易,转载请注明出处,谢谢支持。
|