写点什么

手把手教你基于 luatos 的 4G(LTE Cat.1) 模组接入华为云物联网平台

  • 2023-03-10
    中国香港
  • 本文字数:3967 字

    阅读完需:约 13 分钟

手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台

本文分享自华为云社区《基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台完成设备通信与控制(Air780e)》,作者:中华小能能。

一、简介


1、项目介绍


之前发布的文章有 esp8266 的 wifi 模块和 BC20 的 NB 模块与华为云物联网通信为主,本期文章采用了合宙的 4G LTE Cat.1 模块,编程语言用的是 lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个 LED 灯作为受控设备进行云端命令的控制,本期内容为我们在户外的项目应用中提供一些参考方案,实现手机远程控制户外设备与数据通信的功能。


准备:


  • Air780e 开发板

  • usb-typec 数据线

  • 4G SIM 手机卡(可上网)

2、Air780E 模组


Air780E 是合宙通信推出的 LTE Cat.1bis 通信模块,采用移芯 EC618 平台,支持 4G 全网通 支持双卡单待、支持 SPI LCD、支持 USB 2.0, 仅 CDC 功能、支持 I2S 数字语音接口、支持摄像头等配置,支持 AT 指令开发、CSDK 开发和 luatos 的 lua 脚本语言的多种开发,开发板目前淘宝官网是 39.9,性价比还是可以的


3、luatos


Lua 可以说是目前嵌入式方案中,资源占用最小、运行效率最高、语法最简洁的一门脚本语言。对于编程小白来说,它适合作为你的编程入门语言,因为语法简单。对于会 c 语言的老手来说,它与 c 可以完美契合,再加上 LuatOS 本身就是开源,你可以轻松地使用 c 为其添加一套 c 库接口,享受它的高效。在本次教程中,我们便使用 lua 语言跑 luatos 实现对华为云物联网平台的设备通信与控制。

4、华为云物联网平台


物联网平台的相关配置在这里就不和大家一一重复了,创建服务、设备、属性、命令等过程大家可以参考以前发布的文章(文末有链接),主要需要提前准备的数据有华为云物联网平台的设备三元组、相关 MQTT 发布订阅主题等,参考如下:


local mqtt_host = "iot-mqtts.cn-north-4.myhuaweicloud.com"  local mqtt_port = 1883  local mqtt_isssl = falselocal client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"local password = "eaff6453a8b5b774b11funiot99aa367b52df8funiot5333funiotf76bea151"local mqtt_hw = nillocal devdata_topic="$oc/devices/61fb2d7fde9933029funiot_esp8266_test01/sys/properties/report" --订阅属性上报主题local cmdrec_topic="$oc/devices/61fb2d7fde9933029befuniot_esp8266_test01/sys/commands/#"         --订阅命令下发主题local service_id="Dev_data"             --服务IDlocal command_name="Control"            --控制命令
复制代码

二、完整开发流程

1. 下载软件包与编译烧录工具

1) LuatOS 软件包:Air780e 使用 LuatOS-SoC@EC618


下载链接:LuatOS-SoC@EC618 V1103

2) 调试与烧录工具:Luatools


下载链接:https://doc.openluat.com/wiki/37?wiki_page_id=4489#LuaTools__9

2. 编写 luatos 脚本


-- 获取更多资料,可以关注公众号"IOT趣制作"-- LuaTools需要PROJECT和VERSION这两个信息PROJECT = "led"VERSION = "1.0.0"-- 引入必要的库文件(lua编写), 内部库不需要requiresys = require("sys")log.info("main", "mqtt_huaweiiot")print(_VERSION)if wdt then    --添加硬狗防止程序卡死,在支持的设备上启用这个功能    wdt.init(9000)--初始化watchdog设置为9s    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗end--用户代码开始-----------------------------------------------------根据自己华为云物联网平台的配置修改以下参数,下列参数仅作参考local mqtt_host = "iot-mqtts.cn-north-4.myhuaweicloud.com"  local mqtt_port = 1883  local mqtt_isssl = falselocal client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"local password = "eaff6453a8b5b774b11funiot99aa367b52df8funiot5333funiotf76bea151"local mqtt_hw = nillocal devdata_topic="$oc/devices/61fb2d7fde9933029funiot_esp8266_test01/sys/properties/report" --订阅属性上报主题local cmdrec_topic="$oc/devices/61fb2d7fde9933029befuniot_esp8266_test01/sys/commands/#"         --订阅命令下发主题local service_id="Dev_data"             --服务IDlocal command_name="Control"            --控制命令local LED_PIN=27                        --LED引脚编号gpio.setup(LED_PIN,0, gpio.PULLUP)      --设置LED上拉输出
sys.taskInit(function() while 1 do --网络相关 mobile.simid(2) LED = gpio.setup(27, 0, gpio.PULLUP) device_id = mobile.imei() sys.waitUntil("IP_READY", 30000) --mqtt客户端创建
mqtt_hw = mqtt.create(nil,mqtt_host, mqtt_port, mqtt_isssl, ca_file) mqtt_hw:auth(client_id,user_name,password) mqtt_hw:keepalive(60) -- 默认值240s mqtt_hw:autoreconn(true, 3000) -- 自动重连机制 --注册mqtt回调 mqtt_hw:on(function(mqtt_client, event, data, payload) -- 用户自定义代码 log.info("mqtt", "event", event, mqtt_client, data, payload) if event == "conack" then --连接响应成功 sys.publish("mqtt_conack")--订阅主题 mqtt_client:subscribe(pub_devdata_topic) mqtt_client:subscribe(pub_cmdrec_topic) elseif event == "recv" then log.info("mqtt", "downlink", "topic", data, "payload", payload) print("payload:",payload) --解析json --例如:{"paras":{"led":1},"service_id":"Dev_data","command_name":"Control"} local mycmd=json.decode(payload) if mycmd then -- 若解码失败, 会返回nil print("service_id :",mycmd["service_id"]) print("command_name is",mycmd["command_name"]) print("paras->led is",mycmd["paras"]["led"]) if mycmd["service_id"]==service_id and mycmd["command_name"]==command_name then if mycmd["paras"]["led"]==1 then print("led turn on") gpio.set(LED_PIN, gpio.HIGH) elseif mycmd["paras"]["led"]==0 then print("led turn off") gpio.set(LED_PIN, gpio.LOW) end end end elseif event == "sent" then log.info("mqtt", "sent", "pkgid", data) -- elseif event == "disconnect" then -- 非自动重连时,按需重启mqtt_hw -- mqtt_client:connect() end end) --连接mqtt mqtt_hw:connect() sys.waitUntil("mqtt_conack") while true do -- mqtt_hw自动处理重连 local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000) if ret then if topic == "close" then break end mqtt_hw:publish(topic, data, qos) end end mqtt_hw:close() mqtt_hw = nil end end)--定时上报属性sys.taskInit(function() local topic = devdata_topic --上报的topic local temp=0 --温度属性值 local data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}" local qos = 1 local temp=0 while true do sys.wait(5000) if mqtt_hw and mqtt_hw:ready() then -- mqtt_hw:subscribe(topic) local pkgid = mqtt_hw:publish(topic, data, qos) temp=temp+1 data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}" -- 也可以通过sys.publish发布到指定task去 -- sys.publish("mqtt_pub", topic, data, qos) end endend)
-- 用户代码已结束----------------------------------------------- 结尾总是这一句sys.run()-- sys.run()之后后面不要加任何语句!!!!!
复制代码

3. 编译烧录


打开 Luatools,点击项目管理按钮,选择下载好的固件(后缀名为 soc 的文件)和编写好的 main.lua 文件,勾选 USB BOOT 下载,点击下载底层和脚本按钮下载即可,具体操作流程如下图所示: 



4. 运行结果


 

 

命令接收的同时开发板的 LED 灯光会对应的完成开关亮灭

5.Android APP


这里我们同样可以采用之前的 Android APP 完成与物联网平台的通信,实现手机远程控制户外设备与数据通信的功能


链接:【华为云 IOT 的 Android 应用开发-详细教程】:https://bbs.huaweicloud.com/forum/thread-186368-1-1.html

6.其他相关参考文章


【stm32+AT 指令+ESP8266 接入华为云物联网平台并完成属性上报与下发的命令处理】https://bbs.huaweicloud.com/forum/thread-195143-1-1.html


【esp8266 接入华为云物联网平台完成属性上报、命令处理】https://bbs.huaweicloud.com/forum/thread-187353-1-1.html


点击关注,第一时间了解华为云新鲜技术~

发布于: 2023-03-10阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台_物联网_华为云开发者联盟_InfoQ写作社区