查看: 4537|回復: 1|關注: 0
打印 上一主題 下一主題

辽宁辽宁快乐12号码走势: [我分享] 物聯網專題:NodeMCU和Thingspeak

[復制鏈接]

論壇優秀回答者

辽宁快乐12预测一号码推荐号码 www.exedlj.com.cn 40

主題

1297

帖子

111

最佳答案
  • 關注者: 82
跳轉到指定樓層
1#
發表于 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. //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: [email protected]
《MATLAB面向對象編程--從入門到設計模式》已經由北航出版社正式出版。
//ilovematlab.cn/thread-313689-1-1.html

新手

10 麥片

財富積分


050


0

主題

5

帖子

0

最佳答案
2#
發表于 2018-6-20 07:56:33 | 只看該作者
學習了,感謝
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

關閉

站長推薦上一條 /4 下一條

快速回復 辽宁快乐12预测一号码推荐号码 返回列表