一、简介

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 = false
local client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"
local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"
local password = "eaff6453a8b5b774b11funiotfuniot7funiotf8funiot5333funiotf76bea151"
local mqtt_hw = nil
local 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"             --服务ID
local command_name="Control"            --控制命令

二、完整开发流程

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

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

下载链接:LuatOS-SoC@EC618 V1103

2) 调试与烧录工具:Luatools

下载链接:luatools调试与烧录工具

2. 编写luatos脚本

-- 获取更多资料,可以关注公众号"IOT趣制作"
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "led"
VERSION = "1.0.0"
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
log.info("main", "mqtt_huaweiiot")
print(_VERSION)
if wdt then--添加硬狗防止程序卡死,在支持的设备上启用这个功能wdt.init(9000)--初始化watchdog设置为9ssys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
--用户代码开始---------------------------------------------------
--根据自己华为云物联网平台的配置修改以下参数,下列参数仅作参考
local mqtt_host = "iot-mqtts.cn-north-4.myhuaweicloud.com"
local mqtt_port = 1883
local mqtt_isssl = false
local client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"
local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"
local password = "eaff6453a8b5b774b11funiot99aa3funiotuniot5333funiotf76bea151"
local mqtt_hw = nil
local 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"             --服务ID
local 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) -- 默认值240smqtt_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" thenlog.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 -- 若解码失败, 会返回nilprint("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 thenif  mycmd["paras"]["led"]==1 thenprint("led turn on")gpio.set(LED_PIN, gpio.HIGH)elseif mycmd["paras"]["led"]==0 thenprint("led turn off")gpio.set(LED_PIN, gpio.LOW)endend            end elseif event == "sent" thenlog.info("mqtt", "sent", "pkgid", data)-- elseif event == "disconnect" then-- 非自动重连时,按需重启mqtt_hw-- mqtt_client:connect()endend)--连接mqttmqtt_hw:connect()sys.waitUntil("mqtt_conack")while true do-- mqtt_hw自动处理重连local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)if ret thenif topic == "close" then break endmqtt_hw:publish(topic, data, qos)endendmqtt_hw:close()mqtt_hw = nil   end
end)
--定时上报属性
sys.taskInit(function()local topic = devdata_topic --上报的topiclocal temp=0    --温度属性值local data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}"local qos = 1local temp=0while true dosys.wait(5000)if mqtt_hw and mqtt_hw:ready() then-- mqtt_hw:subscribe(topic)local pkgid = mqtt_hw:publish(topic, data, qos)temp=temp+1data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}"-- 也可以通过sys.publish发布到指定task去-- sys.publish("mqtt_pub", topic, data, qos)endend
end)-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

3. 编译烧录

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

4. 运行结果


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

5.Android APP

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

【华为云IOT的Android应用开发-详细教程】

6.其他相关参考文章

【stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理】

【esp8266接入华为云物联网平台完成属性上报、命令处理】
【华为云IOT的Android应用开发-详细教程】

合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制相关推荐

  1. 合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

    一.简介 1.项目介绍 之前发布的文章有采用合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报, ...

  2. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

    (示例:stm32f103c8t6+esp01s串口AT指令模式) 流程简介: 一. MQTT透传AT固件烧录 本期教程使用的是stm32+AT指令控制esp01s接入华为云联网平台完成数据上报与命令 ...

  3. ESP8266通过AT指令接入华为云物联网平台

    1. esp8266 MQTT固件烧录 在先前如果使用Arduino开发过后的esp8266可能已经无法使用AT指令,或者出厂固件不支持全部的MQTT功能,这里我们首先对esp8266进行MQTT固件 ...

  4. 教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发)

    教你如何使用esp8266接入华为云物联网平台(IOTDA)(Arduino IDE开发) 一.简介         esp8266系列作为低功耗高性价比的嵌入式无线网络控制模块,深受对嵌入式感兴趣的 ...

  5. HI3861学习笔记(25)——接入华为云物联网平台IoT

    一.平台简介 设备接入服务(IoTDA) 是华为云的物联网平台,提供海量设备连接上云.设备和云端双向消息通信.批量设备管理.远程控制和监控.OTA升级.设备联动规则等能力,并可将设备数据灵活流转到华为 ...

  6. 【物联网】华为云物联网平台-基于C示例代码的快速体验

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建产品 04. 注册设备 05. C语言工程下载 06. 编译OpenSSL库 07. 编译paho库 08. 编译C参 ...

  7. STM32 标准库+ESP8266+华为云物联网平台

    文章内容: STM32标准库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应,并将相关代码打包成HuaweiIOT_a ...

  8. STM32 HAL库+ESP8266+华为云物联网平台

    文章内容: STM32 HAL库通过串口发送AT指令完成与ESP8266的控制实现接入华为云物联网平台,并完成基本通信与控制,包括设备属性上报和命令下发解析与响应. 文末获取"STM32 H ...

  9. 华为云物联网平台微信小程序开发教程2.0【完整详细教程】

    一.简介   在之前曾发布过一篇文章"华为云物联网平台的微信小程序开发",在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题 ...

最新文章

  1. oracle多种导入导出数据方法
  2. 建立与ftp服务器的连接——完成版(java)
  3. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1124. 骑马修栅栏:欧拉路径、dfs
  4. Celery组件架构介绍
  5. IOS NSArray 倒序
  6. 数独游戏求解:解法适用于任意阶数的数独
  7. liferay requestrequest和actionRequest用法
  8. cs文件中控制页面table的大小、title名称(.aspx)
  9. 前端常见安装的一些环境和配置
  10. php168 shell,php168 v6/v7鸡肋Getshell安全问题
  11. FileZilla Client中文乱码
  12. PCB生产工艺流程博大精深
  13. PPT怎么修改母版背景
  14. 【2021年度总结】:23岁的流水账
  15. 【深度学习】搭建类似LeNet-5网络识别Fashion-MNIST数据集(衣服,鞋子等)
  16. Exploring Phrase Grounding without Training: Contextualisation and Extension to Text-Based Image Ret
  17. MOBA类和“吃鸡”游戏为什么对网络延迟要求高?
  18. Excel·VBA按行拆分工作表
  19. js控制台 console 骚操作-打印图片-自定义样式-字符画
  20. embed的名词_embed是什么意思_embed的翻译_音标_读音_用法_例句_爱词霸在线词典

热门文章

  1. 乡镇人口数据查询渠道
  2. Git 提交描述规范
  3. 迅雷X - 类似迅雷的悬浮窗口
  4. 单端怎么转差分信号_单端转差分信号电路详解
  5. php中ip地址的正则表达式,PHP_IP地址正则表达式匹配方法,正则表达式(Regular Expression, - phpStudy...
  6. 机器学习算法原理系列篇4:建模流程(上)
  7. 开学季 | 用十本书打破固有思维,“文理兼修”
  8. 抖音X-GorgonXgorgon等参数在线生成
  9. 【bzoj 5248】一双木棋
  10. 肤色冷暖色测试软件_皮肤测评+管理的APP超好用!!测出冷暖皮