手把手教你基於luatos的4G(LTE Cat.1)模組接入華為雲物聯網平臺

来源:https://www.cnblogs.com/huaweiyun/archive/2023/03/10/17202863.html
-Advertisement-
Play Games

摘要:本期文章採用了4G LTE Cat.1模塊,編程語言用的是lua,實現對華為雲物聯網平臺的設備通信與控制 本文分享自華為雲社區《基於luatos的4G(LTE Cat.1)模組接入華為雲物聯網平臺完成設備通信與控制(Air780e)》,作者:中華小能能。 一、簡介 1、項目介紹 本期文章採用了 ...


摘要:本期文章採用了4G LTE Cat.1模塊,編程語言用的是lua,實現對華為雲物聯網平臺的設備通信與控制

本文分享自華為雲社區《基於luatos的4G(LTE Cat.1)模組接入華為雲物聯網平臺完成設備通信與控制(Air780e)》,作者:中華小能能。

一、簡介

1、項目介紹

本期文章採用了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 = "eaff6453a8b5b774b11funiot99aa367b52df8funiot5333funiotf76bea151"
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

下載鏈接: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編寫), 內部庫不需要require
sys = 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 = false
local client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"
local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"
local password = "eaff6453a8b5b774b11funiot99aa367b52df8funiot5333funiotf76bea151"
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) -- 預設值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
 end
end)
-- 用戶代碼已結束---------------------------------------------
-- 結尾總是這一句
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

 

點擊關註,第一時間瞭解華為雲新鮮技術~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. EF Core簡介Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數據訪問技術。 EF Core 可用作對象關係映射程式 (O/RM),這可以實現以下兩點: 使 .NET 開發人員能夠使用 .NET 對象處理資料庫 ...
  • 如果熟悉 GIthub 我們經常可以在一些開源項目的 PR 上看到會配置測試的驗證以及覆蓋率的報告,並且可以強制覆蓋率不低於設定的值才可以進行 Merge PR。 1.測試 創建一個 xUnit 單元測試項目。 Class /// <summary> /// Represents a class w ...
  • 在合宙上買了一片1.54寸的墨水屏一直在吃灰, 這次趁點亮的機會把AIR32F103上的驅動示例給做了. 將微雪的墨水屏驅動移植到 AIR32F103 上, 代碼已經提交到 GitHub 倉庫, 如果需要驅動其它型號的墨水屏, 編輯 EPD_Config.h 將 #define EPD_1IN54 ... ...
  • LVGL是嵌入式設備中常用的圖形顯示庫, 這篇基於 256K Flash 的 AIR32F103CCT6 和 SPI介面的 ST7735 128x160 LCD屏, 介紹 LVGL 在無系統環境和FreeRTO環境, 帶DMA和不帶DMA方式的集成步驟 ...
  • 準備工作:樹莓派4B一個,記憶體不小於16G的TF卡一個,樹莓派的充電線一個,筆記本電腦一臺,網線一根,讀卡器一個 #1、格式化TF卡 建議選擇16G以上的TF卡,下載格式化工具 選擇要格式化的TF所在的分區 滑鼠右鍵點擊箭頭所指的區域選擇刪除分區,將boot和rootfs兩個分區都刪除乾凈,點擊保存 ...
  • 編譯安裝 HAProxy 新版 LTS 版本,編譯安裝 Keepalived 開啟HAProxy多線程,線程數與CPU核心數保持一致,並綁定CPU核心 因業務較多避免配置文件誤操作,需要按每業務一個配置文件並統一保存至/etc/haproxy/conf.d目錄中 基於ACL實現單IP多功能變數名稱負載功能, ...
  • 一、 activebackup - 主備模式 一個網卡處於活動狀態,另一個處於備份狀態,所有流量都在主鏈路上處理,當活動網卡down掉時,啟用備份網卡。 實驗環境VMware虛擬機; 這裡我要實現雙網卡綁定主備模式,並且當主卡故障恢復後,活動埠自動切回主卡(調整prio優先順序實現),如果不加優先順序 ...
  • 唯一的標識一個設備是一個基本功能,可以擁有很多應用場景,比如軟體授權(如何保證你的軟體在授權後才能在特定機器上使用)、軟體 License,設備標識,設備身份識別等。 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...