今天整合了Luatos的18B20温度采集+串口打印输出。直接上代码:
- -- LuaTools需要PROJECT和VERSION这两个信息
- PROJECT = "mytemp"
- VERSION = "1.0.0"
- -- sys库是标配
- _G.sys = require("sys")
- -- 硬件接线
- --[[
- GPIO17 -- DAT
- VPAD/VDDIO -- VCC
- GND -- GND
- ]]
- -- 对接SSD1306
- function display_str(str)
- disp.clear()
- disp.drawStr(str, 1, 18)
- disp.update()
- end
- function ui_update()
- disp.clear() -- 清屏
- disp.drawStr(os.date("%Y-%m-%d %H:%M:%S"), 1, 12) -- 写日期
- disp.drawStr("Luat@Air101" .. " " .. _VERSION, 1, 24) -- 写版本号
- disp.update()
- end
- -- 初始化显示屏
- log.info("disp", "init ssd1306") -- log库是内置库,内置库均不需要require
- disp.init({mode="i2c_sw", pin0=1, pin1=4}) -- 通过PA1 SLK/PA4 SDA模拟, 也可以用硬件i2c脚
- disp.setFont(1) -- 启用中文字体,文泉驿点阵宋体 12x12
- display_str("启动中 ...")
- -- 串口ID,串口读缓冲区
- local UART_ID, sendQueue = 1, {}
- -- 串口超时,串口准备好后发布的消息
- --例子是100ms,按需求改
- local uartimeout, recvReady = 10, "UART_RECV_ID"
- --初始化
- local result = uart.setup(
- UART_ID,--串口id
- 115200,--波特率
- 8,--数据位
- 1--停止位
- )
- NETLED = gpio.setup(18, 1)
- sys.taskInit(function()
- while 1 do
- -- 一闪一闪亮晶晶
- NETLED(0)
- sys.wait(500)
- NETLED(1)
- sys.wait(500)
- end
- end)
- uart.on(UART_ID, "receive", function(uid, length)
- local s
- while true do--保证读完不能丢包
- s = uart.read(uid, length)
- if #s == 0 then break end
- table.insert(sendQueue, s)
- end
- sys.timerStart(sys.publish, uartimeout, recvReady)
- end)
- -- 向串口发送收到的字符串
- sys.subscribe(recvReady, function()
- --拼接所有收到的数据
- local str = table.concat(sendQueue)
- -- 串口的数据读完后清空缓冲区
- sendQueue = {}
- --注意打印会影响运行速度,调试完注释掉
- log.info("uartTask.read length", #str, str:sub(1,100))
- --在这里处理接收到的数据,这是例子
- if str:find("12345678901234567890") == 1 then --如果满足开头
- uart.write(UART_ID,"1234567890x2 lol") --回复
- else
- uart.write(UART_ID,"not match "..str) --回复
- end
- end)
- sys.taskInit(function()
- while 1 do
- sys.wait(5000) -- 5秒读取一次
- local val,result = sensor.ds18b20(17, true) -- GPIO17且校验CRC值
- uart.write(UART_ID,"TEMP:" ..val.."rn") --回复
- --log.info("sensor", "ds18b20", sensor.ds18b20(17)) -- GPIO17脚
- disp.clear() -- 清屏
- disp.drawStr("TEMP" .. " " .. val, 1, 24) -- 写版本号
- disp.update()
- end
- end)
- -- 用户代码已结束---------------------------------------------
- -- 结尾总是这一句
- sys.run()
- -- sys.run()之后后面不要加任何语句!!!!!
复制代码
0
|
|
|
|