就在本周,Air780E的LuatOS測(cè)試固件已經(jīng)開(kāi)源在Gitee上,新的平臺(tái)采用LuatOS-SOC接口,API與之前Air10X和ESP32系列完成統(tǒng)一。也就是一套代碼可以4G模組、MCU、Wi-Fi模組上通用,一次開(kāi)發(fā)即可擁有全平臺(tái)支持。
今天跟大家分享學(xué)習(xí)一下使用不到100行代碼接入騰訊云,并通過(guò)騰訊連連小程序遠(yuǎn)程控制開(kāi)發(fā)板燈的亮滅。一套代碼可以在Air780E(4G)、Air105+W5500(以太網(wǎng))、ESP32/C3/C2/S3(Wi-Fi)三種平臺(tái)無(wú)縫切換,一次開(kāi)發(fā)實(shí)現(xiàn)三種接入方式。
1
騰訊云準(zhǔn)備
1.1 新建項(xiàng)目
我們用到的是騰訊云的物聯(lián)網(wǎng)開(kāi)發(fā)平臺(tái):
沒(méi)賬號(hào)的可自己注冊(cè),每個(gè)賬號(hào)都有免費(fèi)額度,足夠我們自己玩玩了。點(diǎn)擊公共實(shí)例:
然后新建項(xiàng)目,項(xiàng)目名稱(chēng)自己起一個(gè),描述寫(xiě)不寫(xiě)都行,填完保存:
1.2 新建產(chǎn)品
然后在頁(yè)面上就能看到我們新建的項(xiàng)目了,點(diǎn)擊項(xiàng)目名稱(chēng),進(jìn)去新建產(chǎn)品,名稱(chēng)我這里叫遠(yuǎn)程開(kāi)關(guān)(根據(jù)自己的項(xiàng)目填寫(xiě)即可)。然后品類(lèi)選標(biāo)準(zhǔn)品類(lèi),點(diǎn)進(jìn)去搜索開(kāi)關(guān),勾選一路開(kāi)關(guān):
通信方式選2G/3G/4G,其他默認(rèn)即可,然后點(diǎn)擊確定:
1.3 添加設(shè)備
點(diǎn)進(jìn)我們剛新建的產(chǎn)品,點(diǎn)4設(shè)備調(diào)試頁(yè)面,點(diǎn)擊新建設(shè)備。
填寫(xiě)設(shè)備名稱(chēng),建議用設(shè)備imei等唯一標(biāo)識(shí),我這里演示方便就寫(xiě)了Air780E:
點(diǎn)擊我們剛新建的設(shè)備,記錄設(shè)備名稱(chēng)、設(shè)備密鑰、產(chǎn)品ID這幾個(gè)參數(shù),一會(huì)兒要用。
2
設(shè)備端開(kāi)發(fā)
因?yàn)橐龆嗥脚_(tái)兼容,所以首先根據(jù)不同平臺(tái)做相應(yīng)初始化。
手機(jī)橫屏/上下滑動(dòng)查看完整代碼:
Lua if rtos.bsp() == "ESP32C3" then LED = gpio.setup(12, 0, gpio.PULLUP)
wlan.init()
wlan.setMode(wlan.STATION)
wlan.connect(ssid, password, 1)
local result, data = sys.waitUntil("IP_READY")
log.info("wlan", "IP_READY", result, data)elseif rtos.bsp() == "AIR105" then
w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
w5500.config() --默認(rèn)是DHCP模式
w5500.bind(socket.ETH0)
LED = gpio.setup(62, 0, gpio.PULLUP)
sys.wait(1000) elseif rtos.bsp() == "EC618" then
mobile.simid(2) LED = gpio.setup(27, 0, gpio.PULLUP)end
2.1 計(jì)算連接參數(shù)
騰訊云是需要鑒權(quán)才允許設(shè)備連接,因此,我們要首先計(jì)算連接參數(shù),這里使用iotauth庫(kù)可以方便的計(jì)算阿里云、騰訊云、百度云、涂鴉云、華為云的連接參數(shù)。
根據(jù)API的說(shuō)明,結(jié)合前面我們?cè)隍v訊云注冊(cè)的設(shè)備,代碼就很簡(jiǎn)單了。代碼如下,參數(shù)以變量的形式定義好了,改成自己的就行。
Lua
local client_id, user_name, password = iotauth.qcloud(product_key, device_id, device_secret, "sha1", 1700561166)
log.info("參數(shù)", client_id, user_name, password)
2.2 連接服務(wù)器
獲取參數(shù)以后,根據(jù)返回值就可以得到連接mqtt服務(wù)器的信息,根據(jù)mqtt庫(kù)的說(shuō)明,參考mqtt的demo直接抄過(guò)來(lái)就行。
2.3 處理數(shù)據(jù)
根據(jù)騰訊云的文檔,我們使用的物模型中power_switch是我們需要的開(kāi)關(guān)參數(shù)。我們只需要根據(jù)文檔對(duì)收到的數(shù)據(jù)解析即可,mqtt部分全部代碼如下:
手機(jī)橫屏/上下滑動(dòng)查看完整代碼:
Lua mqttc = mqtt.create(nil, product_key .. ".iotcloud.tencentdevices.com", 1883)
mqttc:auth(client_id, user_name, password)
mqttc:keepalive(240) -- 默認(rèn)值240smqttc:autoreconn(true, 3000) -- 自動(dòng)重連機(jī)制mqttc:on(
function(mqtt_client, event, data, payload)
if event == "conack"then
sys.publish("mqtt_conack")
log.info("mqtt", "mqtt已連接")
mqtt_client:subscribe("$thing/down/property/" .. product_key .. "/".. device_id)
elseif event == "recv" then
log.info("mqtt", "收到消息", data, payload)
local json = json.decode(payload)
if json.method == "control" then
if json.params.power_switch == 1 then
LED(1)
elseif json.params.power_switch == 0 then
LED(0)
end
end
elseif event == "sent"then
log.info("mqtt", "sent", "pkgid", data)
end
end)
mqttc:connect()
sys.wait(10000)
sys.waitUntil("mqtt_conack")while true do
local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000) if ret then
if topic == "close" then
break
end
mqttc:publish(topic, data, qos) endendmqttc:close()
mqttc = nil
3
遠(yuǎn)程開(kāi)關(guān)測(cè)試
把完整代碼燒錄進(jìn)設(shè)備,不會(huì)燒錄的可以先看教程:
點(diǎn)擊騰訊云設(shè)備的二維碼:
使用騰訊連連小程序掃碼添加設(shè)備,添加完就能看到我們?cè)O(shè)備在線了:
點(diǎn)擊總開(kāi)關(guān),改變開(kāi)關(guān)狀態(tài),就能看到,設(shè)備上的燈跟著改變狀態(tài)了:
日志也可以看到收到的消息,可用根據(jù)消息調(diào)試其他功能,比如倒計(jì)時(shí)開(kāi)啟。
至此,我們用了不到100行代碼就實(shí)現(xiàn)了連接騰訊云,并解析數(shù)據(jù)遠(yuǎn)程控制燈的開(kāi)關(guān),且代碼可跨平臺(tái)使用,無(wú)需多次開(kāi)發(fā)。在行業(yè)應(yīng)用中,一小時(shí)即可完成產(chǎn)品原型,遙遙領(lǐng)先同行。
歡迎加入技術(shù)交流群,探討更多應(yīng)用!
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2912文章
44881瀏覽量
375692
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論