查看: 3695|回复: 1|关注: 0

[我分享] 物联网专题:NodeMCU和Thingspeak

[复制链接]

论坛优秀回答者

39

主题

1288

帖子

110

最佳答案
  • 关注者: 65
发表于 2016-8-24 10:05:27 | 显示全部楼层 |阅读模式
本帖最后由 oopmatlab 于 2016-8-24 10:07 编辑

物联网这个词可以拆成 物+联网。物,就是各种各样可编程可联网的硬件。联网,即云端提供的Service。前面几篇我们介绍了Thingspeak的服务,这是物联网的核心,当然,没有“物”,这些服务也无从可谈,所有下面几篇,我们也稍花笔墨介绍一下“物”,如何让这些“物”使用Thingspeak提供的数据收集和分析的功能。这篇我们先介绍NodeMCU和Thingspeak.

如何在Thingspeak中配置一个数据Channel并发送数据用NodeMCU向云端发送数据之前,我们先要在thingspeak网站上注册一个Channel,之前的教程我们已经介绍过了,这里不再赘述。
参见
https://lifeinplaintextblog.wordpress.com/thingspeak-tutorial-1/



NodeMCU如何自动发出HTTP Request
如何发送HTTP Request
NodeMCU的Firmware中自带了一些常用的Library,详见:
  1. http://www.nodemcu.com/docs/index/
复制代码

比如NET,PWM,MQTT, 这里我们使用NET Library,下篇我们将使用PWM和MQTT Library。
NET MODULE可以用来发送HTTP Request,下面的程序片段假设已经得到了温度,存放在变量t中:
  1. function postToThingspeak(tmp)
  2. -- 创建一个TCP对象
  3.     conn=net.createConnection(net.TCP, 0)

  4. -- 连接成功之后的Callback,发送POST REQUEST
  5. -- 其中的api_key要替换成实际的频道的key
  6. -- 其中的tmp来自函数的输入
  7.    conn:on("connection",function(conn, payload)
  8.       cmd ="POST /update.json?api_key=YourAPIKey&field1="..tmp
  9.         .. " HTTP/1.1\r\n"
  10.         .. "Host: api.thingspeak.com\r\n"
  11.         .. "Connection: close\r\n"
  12.         .. "Accept: */*\r\n"
  13.         .. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
  14.         .. "\r\n";
  15.             print(cmd);
  16.             conn:send(cmd);
  17.             end)
  18. -- 得到RESPONSE的Callback:关闭这个连接            
  19.     conn:on("receive", function(conn, payload)   
  20.             conn:close()
  21.     end)
  22.     conn:connect(80,'api.thingspeak.com')
  23. end
复制代码

最后利用LUA的timer实现每隔20秒发送一次数据
  1. tmr.alarm(1,20000,1,function()
  2. -- getTmp仅仅example中的sd18b20.lua包装成了一个函数
  3.   tmp = getTmp();
  4.   postToThingspeak(tmp);
  5. end)
复制代码

因为thingspeak限制传感器连续上传数据的间隔不能低于15秒(thingspeak其实是一个开源项目,可以通过自己deploy thingspeak来去掉这个数据流量的限制。)
如果想让NodeMCU一启动就自动运行温度收集,只需要把这个程序的名字保存成init.lua即可。


NodeMCU如何自动连上WIFI
下一步是实地的deploy NodeMCU,NodeMCU的工作电源是3.3V,为了要让开发板能够一连接电源就自动连接到路由器上,我们需要在init.lua程序中调用如下的函数
  1. function setupWifi()
  2.   wifi.setmode(wifi.STATION)
  3.   wifi.sta.config("NETGEAR75","nobugs")
  4.   wifi.sta.connect();
  5.   wifi.sta.setip({ip="192.168.1.7",netmask="255.255.255.0",gateway="192.168.1.1"})
  6.   tmr.alarm(1, 1000, 1, function()
  7.   if wifi.sta.getip()== nil then
  8.      print("IP unavaiable, Waiting...")
  9.   else
  10.      tmr.stop(1)
  11.       print("ESP8266 mode is: " .. wifi.getmode())
  12.       print("The module MAC address is: " .. wifi.ap.getmac())
  13.       print("Config done, IP is "..wifi.sta.getip())
  14.   end
  15. end)
  16. end

复制代码


本tutorial中介绍了NodeMCU的配置,利用温度传感器收集环境温度,NodeMCU发送HTTP request,thingspeak的数据收集channel的注册和使用,最后在MATLAB的环境中获得收集的数据。流程如下:

                               
登录/注册后可看大图








Ph.D, 软件工程师.  Email: oopmatlab@gmail.com
《MATLAB面向对象编程--从入门到设计模式》已经由北航出版社正式出版。
http://ilovematlab.cn/thread-313689-1-1.html

新手

10 麦片

财富积分


050


0

主题

5

帖子

0

最佳答案
发表于 2018-6-20 07:56:33 | 显示全部楼层
学习了,感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表