首先說明一下,本教程只支持連接天貓精靈與小度音箱,如果想連接小愛同學可以看下面第三點。 再次說明本文只適合想快速搭建連接智能音箱的同學,不需要基礎(chǔ)。
一、需要你有一塊nodemcu開發(fā)板或者ESP8266-01或12F
二、需要你的電腦安裝java環(huán)境,Java環(huán)境需要的安裝包,文章末尾,還有java環(huán)境變量配置這個請自行度娘,教程太多了。
三、擁有一個天貓精靈或者一個小度音箱 (說明:為什么沒有小愛同學,本文通過貝殼物聯(lián)第三方來對接音箱,但是貝殼現(xiàn)在暫時不支持小愛同學,如果大家想要連接小愛同學的話,可以通過blinker平臺,這里不多贅述)
四、需要大家登錄 貝殼物聯(lián) 官網(wǎng)注冊賬號
剩下的就可以安裝下方的視頻教程操作。
視頻鏈接:https://www.bilibili.com/video/av89179475?p=1 共有3集,視頻中并沒有提及esp8266燒寫固件操作,這個很簡單的操作,大家還是度娘吧,這個要是再寫出來就得上圖了。
上方所提到需要的軟件下載鏈接 : https://pan.baidu.com/s/1DBEwOz0FoIhns47qd9amhw 提取碼: 1uuk
-------------------------------------------------------------------------------------------------------------------------------------------------
到這里上面的所有操作應(yīng)該都做完了。
這里我直接把程序?qū)懞茫厦嫖叶甲⑨屃耍恍枰膭?個位置即可。
1、把"ST模式的WIFI名稱"以及"ST模式的WIFI密碼"分別改成路由器的wifi名和密碼,這2個就是告訴esp8266要連接哪個WIFI,WIFI必須有網(wǎng)。
2、"設(shè)備的ID" 這個需要對應(yīng)自己貝殼物聯(lián)上設(shè)備的ID號
3、"設(shè)備的APIKEY" 也是對應(yīng)設(shè)備的APIKEY
- --GPIO引腳模式設(shè)置
- gpio.mode(4,gpio.OUTPUT) --GPIO2 對應(yīng)板子上的LED控制引腳
- --設(shè)置nodemcu為AP與ST模式共存
- wifi.setmode(wifi.STATIONAP)
- --設(shè)置WiFi物理模式
- --"wifi.PHYMODE_B" 對應(yīng) 802.11b,范圍更大,傳輸速率低 ,消耗更多電流
- --"wifi.PHYMODE_G" 對應(yīng) 802.11g,中等范圍,中等傳輸速率,中等電流消耗
- --"wifi.PHYMODE_N" 對應(yīng) 802.11n,最小范圍,快速傳輸速率,最小電流
- wifi.setphymode(wifi.PHYMODE_N)
- --設(shè)置AP wifi名稱及密碼
- cfg={}
- cfg.ssid = "xiaodabuliu"--AP模式的WIFI名稱(小于32字節(jié))
- cfg.pwd = "12345678" --AP模式的WIFI密碼(最少8位才能設(shè)置成功)
- --cfg.auth = "wifi.OPEN" --WIFI認證方式(wifi.OPEN(默認)、wifi.WPA_PSK 、 wifi.WPA2_PSK 、wifi.WPA_WPA2_PSK)
- --cfg.channel = 6 --WIFI信道(1~14)
- cfg.hidden = false --WIFI是否隱藏
- cfg.max = 1 --WIFI最大連接數(shù)(1~4)
- --cfg.beacon = 100 --WIFI廣播間隔(100~60000 默認100)
- cfg.save = false --是否保存到閃存
- wifi.ap.config(cfg) --設(shè)置AP模式
- --設(shè)置ST wifi名稱及密碼
- station_cfg={}
- station_cfg.ssid = "abcdefgh" --ST模式的WIFI名稱(小于32字節(jié))
- station_cfg.pwd = "12345678" --ST模式的WIFI密碼(最少8位才能設(shè)置成功)
- station_cfg.auto = true --啟用自動連接并連接到接入點
- --station_cfg.bssid = "AA:BB:CC:DD:EE:FF" --設(shè)置BSSID
- station_cfg.save = false --是否保存到閃存
- wifi.sta.config(station_cfg)
- --在站點模式下連接到已配置的AP。僅當在中禁用了自動連接時,才需要調(diào)用此方法
- --wifi.sta.connect()
- --
- tcp_bit = 0 --連接服務(wù)器標志位
- beat_time = 0 --用來計算心跳時間
- URL = "www<font face=""">點</font>bigiot<font face=""">點</font>net" --輸入貝殼物聯(lián)網(wǎng)址
- port = 8181 --連接的端口號
- ID1 = "14562" --設(shè)備的ID
- KEY1 = "f126dc2f3" --設(shè)備的APIKEY
- --獲取當前的 AP配置
- do
- print("\n當前AP配置:")
- for k,v in pairs(wifi.ap.getconfig(true)) do
- print(" "..k.." :",v)
- end
- end
- --獲取當前的 WiFi 配置
- do
- local sta_config=wifi.sta.getconfig(true)
- print(string.format("\n當前ST配置:\n\tssid:\"%s\"\n\tpassword:\"%s\"\n\tbssid:\"%s\"\n\tbssid_set:%s\n", sta_config.ssid, sta_config.pwd, sta_config.bssid, (sta_config.bssid_set and "true" or "false")))
- end
- --創(chuàng)建一個TCP客戶端
- cu = net.createConnection(net.TCP,0)
- cu:on("receive",function(cu,pay) --客戶端接收回調(diào)
-
- print(pay) --打印接收消息
-
- r = sjson.decode(pay) --接收數(shù)據(jù)處理
- if r.M == "WELCOME TO BIGIOT" then --服務(wù)器連接成功判斷
- --發(fā)送設(shè)備登錄消息
- ok, s1 = pcall(sjson.encode,{M="checkin",ID=ID1,K=KEY1})
- cu:send(s1.."\n")
- print("Server connection success\n")
- end
- if r.M == "checkinok" then --設(shè)備登錄成功判斷
- tcp_bit = 1
- print("已上線\n")
- end
- if r.C == "play" then --接收到打開命令判斷處理
- gpio.write(4,gpio.LOW) --打開LED
- end
-
- if r.C == "stop" then --接收到關(guān)閉命令判斷處理
- gpio.write(4,gpio.HIGH) --關(guān)閉LED
- end
-
- end)
- --定義定時器myt0 間隔0.5s
- local myt0 = tmr.create()
- myt0:alarm(5000, tmr.ALARM_AUTO, function() -- 發(fā)送
- if tcp_bit == 0 then
- cu:connect(port,URL) --連接貝殼服務(wù)器
- else
- beat_time = beat_time + 1
- end
- --發(fā)送心跳包
- if beat_time >=10 then
- ok, s1 = pcall(sjson.encode,{M="beat"})
- cu:send(s1.."\n")
- beat_time = 0
- end
-
- end)
- myt0:stop() --停止定時器 myt0
- --定義定時器myt1 間隔1s
- local myt1 = tmr.create()
- myt1:alarm(1000, tmr.ALARM_AUTO,function()
- --獲取連接WIFI分配的IP地址
- if wifi.sta.getip() == nil then
- print("not connected, Waiting...")
- else
- myt1:stop() --停止定時器 myt1
- print("分配的IP:"..wifi.sta.getip())
- myt0:start() --定時器 myt0 開始計時
- myt1:unregister() --銷毀定時器 myt1
- end
- end)
復制代碼
我上面的代碼是加注釋的,但是附件包里面是沒有注釋的,因為向8266下載的lua程序如果帶中文就會出現(xiàn)錯誤,所以附件里面的是我把注釋都刪掉的,可以按照上面所說修改完直接下載使用。
下載的時候,大家可以把下載的lua文件重命名為init.lua這樣每次上電都會執(zhí)行程序,如果不是這個名字下載進去,那么下次上電程序不會自動運行,當然也有其他方法,但是不如直接用init.lua方便。
大家遇到什么操作有誤或者程序不能運行,在下面留言哦。
init.zip
(1.1 KB, 下載次數(shù): 32)
2020-2-17 18:07 上傳
點擊文件名下載附件
Lua代碼 下載積分: 黑幣 -5

2020-02-21 更新
大家可以利用一個nodemcu同時登錄貝殼物聯(lián)的多個設(shè)備,實現(xiàn)多個控制,多個的登錄代碼我會下次更新分享。
還有現(xiàn)在用的是基于Lua和nodemcu開發(fā)的,因為我這用Docker或者Linux編譯估計一直失敗,不知道是不是網(wǎng)絡(luò)原因,所以就沒有Smartconfig(WIFI一鍵配置)功能,如果大神有這個功能的最新固件,求大神分享一份。
|