查看原文
其他

跨平台免开发!LuatOS&腾讯云,微信小程序远程开关方案

闫国梁 合宙LuatOS 2023-05-17



就在本周,Air780E的LuatOS测试固件已经开源在Gitee上,新的平台采用LuatOS-SOC接口,API与之前Air10X和ESP32系列完成统一。也就是一套代码可以4G模组、MCU、Wi-Fi模组上通用,一次开发即可拥有全平台支持。

今天跟大家分享学习一下使用不到100行代码接入腾讯云,并通过腾讯连连小程序远程控制开发板灯的亮灭。一套代码可以在Air780E(4G)、Air105+W5500(以太网)、ESP32/C3/C2/S3(Wi-Fi)三种平台无缝切换,一次开发实现三种接入方式。

-  远程开关演示视频 -

接下来开始实操讲解,欢迎加入技术交流群探讨更多应用!


1

腾讯云准备



1.1  新建项目

我们用到的是腾讯云的物联网开发平台:

https://console.cloud.tencent.com/iotexplorer

没账号的可自己注册,每个账号都有免费额度,足够我们自己玩玩了。点击公共实例



然后新建项目,项目名称自己起一个,描述写不写都行,填完保存:



1.2 新建产品

然后在页面上就能看到我们新建的项目了,点击项目名称,进去新建产品,名称我这里叫远程开关(根据自己的项目填写即可)。然后品类选标准品类,点进去搜索开关,勾选一路开关:


通信方式选2G/3G/4G,其他默认即可,然后点击确定:



1.3  添加设备

点进我们刚新建的产品,点4设备调试页面,点击新建设备。


填写设备名称,建议用设备imei等唯一标识,我这里演示方便就写了Air780E: 


点击我们刚新建的设备,记录设备名称、设备密钥、产品ID这几个参数,一会儿要用。





2

设备端开发




因为要做多平台兼容,所以首先根据不同平台做相应初始化。

手机横屏/上下滑动查看完整代码:

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() --默认是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  计算连接参数

腾讯云是需要鉴权才允许设备连接,因此,我们要首先计算连接参数,这里使用iotauth库可以方便的计算阿里云、腾讯云、百度云、涂鸦云、华为云的连接参数。



根据API的说明,结合前面我们在腾讯云注册的设备,代码就很简单了。代码如下,参数以变量的形式定义好了,改成自己的就行。

 Lua 

local client_id, user_name, password = iotauth.qcloud(product_key, device_id, device_secret, "sha1", 1700561166)

log.info("参数", client_id, user_name, password)



2.2  连接服务器

获取参数以后,根据返回值就可以得到连接mqtt服务器的信息,根据mqtt库的说明,参考mqtt的demo直接抄过来就行。


2.3  处理数据

根据腾讯云的文档,我们使用的物模型中power_switch是我们需要的开关参数。我们只需要根据文档对收到的数据解析即可,mqtt部分全部代码如下:


手机横屏/上下滑动查看完整代码:

Lua

mqttc = mqtt.create(nil, product_key .. ".iotcloud.tencentdevices.com", 1883)
mqttc:auth(client_id, user_name, password)
mqttc:keepalive(240) -- 默认值240s
mqttc:autoreconn(true, 3000) -- 自动重连机制
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)

   end

end

mqttc:close()
mqttc = nil







3

远程开关测试




把完整代码烧录进设备,不会烧录的可以先看教程:



点击腾讯云设备的二维码:



使用腾讯连连小程序扫码添加设备,添加完就能看到我们设备在线了:

点击总开关,改变开关状态,就能看到,设备上的灯跟着改变状态了:



日志也可以看到收到的消息,可用根据消息调试其他功能,比如倒计时开启。

至此,我们用了不到100行代码就实现了连接腾讯云,并解析数据远程控制灯的开关,且代码可跨平台使用,无需多次开发。在行业应用中,一小时即可完成产品原型,遥遥领先同行。

欢迎加入技术交流群,探讨更多应用!


- Air780E最新资料汇总-

www.air780e.cn


- Air780E技术交流QQ群 -

QQ扫码入群:627625461


- 合宙技术交流微信群 -

即刻微信/企业微信扫码加入


相关阅读:
合宙极致低功耗4G Cat.1模组Air780E新品上市!
19.8元自制短信转发器,合宙4G新品Air780E+ESP32C3方案





▼合宙低功耗Cat.1新品超值拼团▼

▼超值MCU开发板全场包邮▼



-  更多超值活动,咨询在线客服 -

合宙LuatOS淘宝直营店

Luat.taobao.com


手机淘宝扫码直达,精选行业超值产品

▼了解合宙发展历程/相关产品▼





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存