(5)air202讀取串列埠資料並上傳到阿里雲顯示

2022-09-08 04:42:07 字數 3304 閱讀 4903

根據串列埠助手顯示的資訊,以及模組文件說明我們可以知道

其中red和ir是紅光led的原始資料, hr表示心率值, hrvalid是心率是否有效標識, sp02是血氧數值,,spo2valid是血氧是否有效標識。

在產品中新增需要的自定義功能

找到air202串列埠demo

仿照串列埠程式修改你的air202阿里雲連線程式

下圖中為uart demo main.lua載入的測試模組

其他都和aliyun中main相同,又因我們只需要使用乙個串列埠因此將testuart.lua整合到testaliyun.lua中即可

testaliyun.lua**頂部新增呼叫檔案

require"utils"
在頂部新增變數

--串列埠id,1對應uart1

--如果要修改為uart2,把uart_id賦值為2即可

local uart_id = 1

--串列埠讀到的資料緩衝區

local rdbuf =

""

將串列埠demo中最後的串列埠傳送資料的函式全部複製到testaliyun.lua底部

--[

[函式名:write

功能 :通過串列埠傳送資料

引數 :

s:要傳送的資料

返回值:無]]

function write(s)

log.info(

"testuart.write",s)

uart.write(uart_id,s..

"\r\n"

)end

local function writeok(

) log.info(

"testuart.writeok"

)end

--保持系統處於喚醒狀態,此處只是為了測試需要,所以此模組沒有地方呼叫pm.sleep(

"testuart"

)休眠,不會進入低功耗休眠狀態

--在開發「要求功耗低」的專案時,一定要想辦法保證pm.wake(

"testuart"

)後,在不需要串列埠時呼叫pm.sleep(

"testuart"

)pm.wake(

"testuart"

)--註冊串列埠的資料接收函式,串列埠收到資料後,會以中斷方式,呼叫read介面讀取資料

uart.on(uart_id,"receive",read)

--註冊串列埠的資料傳送通知函式

uart.on(uart_id,"sent",writeok)

--配置並且開啟串列埠

uart.setup(uart_id,115200,8,uart.par_none,uart.stop_1)

--如果需要開啟「串列埠傳送資料完成後,通過非同步訊息通知」的功能,則使用下面的這行setup,注釋掉上面的一行setup

--uart.setup(uart_id,115200,8,uart.par_none,uart.stop_1,nil,1)

注釋掉原來的發布函式,重寫發布函式

--發布一條qos為1的訊息

function publishtest(

) local jsondata

if sconnected then

--注意:在此處自己去控制payload的內容編碼,aliyun庫中不會對payload的內容做任何編碼轉換

while

true

do

data = uart.read(uart_id,"*l"

) --這一部分放在前面是為字串搜尋和轉化提供點時間

local hr=string.match(data,"hr=(%-?%d+)",1)

local hrv=string.match(data,"hrvalid=(%d+)",1)

local spo2=string.match(data,"spo2=(%-?%d+)",1)

local spo2v=string.match(data,"spo2valid=(%d+)",1)

local hr=tonumber(hr)--這是將字串轉化為數值

local hrv=tonumber(hrv)--這是將字串轉化為數值

local spo2=tonumber(spo2)--這是將字串轉化為數值

local spo2v=tonumber(spo2v)--這是將字串轉化為數值

basedata[

"params"][

"hr"

]=hr --這是賦值濕度數值

basedata[

"params"][

"hrv"

]=hrv --這是賦值濕度數值

basedata[

"params"][

"spo2"

]=spo2 --這是賦值濕度數值

basedata[

"params"][

"spo2v"

]=spo2v --這是賦值濕度數值

local vbat = misc.getvbatt(

) basedata[

"params"][

"lightvolt"

]= vbat/1000

if not data or string.len(data)

== 0 then

break end

jsondata=json.encode(basedata)--進行編碼傳輸

aliyun.publish(

"/sys/"

.. product_key ..

"/".. getdevicename()..

"/thing/event/property/post", jsondata, 1,publishtestcb,"publishtest_"

..publishcnt)

end

endend

最後燒寫修改好的程式即

讀取串列埠資料

void uartbuf wd uartbuf ringbuf,uint8 t datain d今天移植一段 的時候看到乙個挺有意思的寫法 如上 這是一段微控制器讀取串列埠資料的函式,一開始看到的時候我很是懵比,要我以前寫的話或者看的大多數程式都是乙個簡單的迴圈賦值到緩衝陣列,索引達到陣列的size...

讀取串列埠資料

讀取串列埠資料 2017年06月01日 12 10 39 閱讀數 700 cpp view plain copy cpp view plain copy void uartbuf wd uartbuf ringbuf,uint8 t datain d今天移植一段 的時候看到乙個挺有意思的寫法 如上 ...

Linux讀取串列埠資料

大致為 有乙個傳送端週期性的往本機串列埠上傳送資料,本機需要定時讀取串列埠資料,解析,獲取自己想要的資訊。實際描述為 由於是做智慧型駕駛的,需要讀取車輛速度,通過obd裝置讀取並解析車輛速度,然後通過藍芽傳送給pc串列埠 也是通過乙個藍芽模組接收 pc端串列埠定時接收串列埠資料並解析。在上述過程中,...