当前位置: 首页 > news >正文

Luatos Air700 改变BL0942串口波特率

 LuatOs 改变模块串口波特率思路参照

luatos 改变AIR530串口波特率

BL0942默认串口波特率可以通过SCLK_BPS引脚接3.3V电源设置到9600bps

 但如果调整到38400bps需要修改0x19寄存器

 bl0942 v1.06版的特殊寄存器说明,注意早期版本特殊寄存器说明存在错误

 

 完整代码

main.lua


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "EMQX_Plug"
VERSION = "1.0.1"--[[
本demo需要mqtt库, 大部分能联网的设备都具有这个库
mqtt也是内置库, 无需require
]]-- sys库是标配
_G.sys = require("sys")
--[[特别注意, 使用mqtt库需要下列语句]]
_G.sysplus = require("sysplus")-- 自动低功耗, 轻休眠模式
-- Air780E支持uart唤醒和网络数据下发唤醒, 但需要断开USB,或者pm.power(pm.USB, false) 但这样也看不到日志了
-- pm.request(pm.LIGHT)-- 串口ID,串口读缓冲区
local bl0942 = require "bl0942"
local UART_ID1, UART1receQueue = 1, {}
local uartimeout, UART1recvReady = 25,"UART_RECV_ID1"local RD_SPECIAL_REGISTER_FLAG=0
local RD_DATA_REGISTER_FLAG=0 
local BAUD_CHANGED_FLAG=0                                                                                                                   
local LED   = gpio.setup(31, 1, gpio.PULLUP)
local RELAY = gpio.setup(9, 1, gpio.PULLUP)
LED(1)if wdt then--添加硬狗防止程序卡死,在支持的设备上启用这个功能wdt.init(9000)--初始化watchdog设置为9ssys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end-- 最常用115200 8N1
local result1 = uart.setup(UART_ID1,--串口id9600,--波特率8,--数据位1--停止位
)
print(_VERSION)sys.taskInit(function()log.info("初始化","bl0942软件复位")BL0942_Write(UART_ID1,bl0942.SOFT_RESET,0x5A,0x5A,0x5A)sys.wait(100) -- 以下代码设置防潜动阈值寄存器,保证电度数据不会累计噪声形成负值BL0942_Write(UART_ID1,bl0942.USR_WRPROT,0x55,0x00,0x00)BL0942_Write(UART_ID1,bl0942.WA_CREEP,0x33,0x00,0x00)--以下改变串口波特率BL0942_Write(UART_ID1,bl0942.MODE,0x87,0x03,0x00)BSP_FLAG=1uart.write(UART_ID1,"     ")--触发uart.on的sent事件--触发uart.on的sent事件print("已改变GPS串口波特率")
end)uart.on(UART_ID1, "sent", function(uid)if BSP_FLAG==1 then -- uart.close(UART_ID1)--此代码注释掉也能实现波特率更改result1 = uart.setup(UART_ID1,--串口id38400,--波特率8,--数据位1--停止位)print("已改变Air700 UART1串口波特率")    BL0942_Write(UART_ID1,bl0942.USR_WRPROT,0xff,0x00,0x00)sys.publish("38400")BSP_FLAG=0BAUD_CHANGED_FLAG=1end  
end)    sys.subscribe("38400",function()uart.on(UART_ID1, "receive", function(uid, length)local swhile true do--保证读完不能丢包s = uart.read(uid, length)if #s == 0 then break endtable.insert(UART1receQueue, s)endsys.timerStart(sys.publish, uartimeout, UART1recvReady)end)
end) sys.subscribe(UART1recvReady, function()if (RD_SPECIAL_REGISTER_FLAG==1) then local m={}local strRe = table.concat(UART1receQueue)if (#strRe)>4 then --可能会有全电参数数据包的23个字节混入,必须剔除return         --读单个寄存器一般返回3个字节end -- log.info("特殊寄存器",#strRe)UART1receQueue = {}RD_SPECIAL_REGISTER_FLAG=0m[1]=string.byte(strRe,1)m[2]=string.byte(strRe,2)m[3]=string.byte(strRe,3)-- print(m[1],m[2],m[3])local m_temp  =  string.char(m[1],m[2],m[3])local mode=string.unpack("i3", m_temp)print(string.format("MODE=%d",mode))endif (RD_DATA_REGISTER_FLAG==1) thenlocal v,c,e={},{},{}local vol,cur,engerywat-- local w,f={},{}-- local freq,engerylocal strDA = table.concat(UART1receQueue)if (#strDA)<23 then --避免解析读寄存器数据return end UART1receQueue = {}RD_DATA_REGISTER_FLAG=0c[1]=string.byte(strDA,2)c[2]=string.byte(strDA,3)c[3]=string.byte(strDA,4)v[1]=string.byte(strDA,5)v[2]=string.byte(strDA,6)v[3]=string.byte(strDA,7)e[1]=string.byte(strDA,14)e[2]=string.byte(strDA,15)e[3]=string.byte(strDA,16)local cur_temp  =  string.char(c[1],c[2],c[3])local vol_temp  =  string.char(v[1],v[2],v[3])  local ene_temp  =  string.char(e[1],e[2],e[3])-- local wat_temp  =  string.char(w[1],w[2],w[3]) -- local freq_temp =  string.char(f[1],f[2],f[3]) local cur   = string.unpack("i3", cur_temp)local vol   = string.unpack("i3", vol_temp)local energy= string.unpack("i3", ene_temp)-- print(string.format("energy=%d",energy))-- local wat   = string.unpack("i3", wat_temp)-- local freq  = string.unpack("i3",freq_temp)pub_vol=(vol*V_CONSTANT)/V_DENOpub_cur=(cur*VREF/I_DENO)*1000  pub_energy=(energy*E_PER_PLUSE)print(string.format("电流=%.1fmA 电压=%.1fV 电度=%0.2f度 ",pub_cur,pub_vol,pub_energy))-- print(string.format("电流=%0.2fA 电压=%.1fV 功率=%0.1fW 电度=%0.2f度 频率=%0.1fHz",Current,Voltage,Energy,Wat,Freq))end      
end)
local cnt = 0sys.timerLoopStart(function()if BAUD_CHANGED_FLAG==1 thenuartimeout=25BL0942_Read(UART_ID1,0xAA)--V_RMS  0xAA bl0942.V_RMS 读取全电参数数据包RD_DATA_REGISTER_FLAG=1 RD_SPECIAL_REGISTER_FLAG=0end 
end, 1000)sys.timerLoopStart(function()if BAUD_CHANGED_FLAG==1 thenuartimeout=5BL0942_Read(UART_ID1,bl0942.MODE) --读0x19用户模式选择寄存器RD_SPECIAL_REGISTER_FLAG=1RD_DATA_REGISTER_FLAG=0end 
end, 2400)-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

 bl0942.lua

local sys = require "sys"VREF      = 1.218V_DENO    =1842052.2V_CONSTANT=121.8I_DENO    =504863.7      --305978*(3.3*1000)/2000DOUBLE_FS  =1000000.0POWER_COEFF=148.3524     --1.218*1.218*20*5P_DENO     =145317.645   --3537*(3.3*1000/2000)*0.0249*1000E_PER_PLUSE=0.000118942bl0942= setmetatable({}, {__index = {WRITE_HEAD   =      0xA8,  READ_HEAD    =      0x58,I_WAVE       =      0x01,    --电流波形寄存器,有符号V_WAVE       =      0x02,    --电压波形寄存器,有符号I_RMS        =      0x03,    --电流有效值寄存器,无符号V_RMS        =      0x04,    --电压有效值寄存器,无符号I_FAST_RMS   =      0x05,    --电流快速有效值寄存器,无符号WATT         =      0x06,    --有功功率寄存器,有符号CF_CNT       =      0x07,    --有功电能脉冲计数寄存器,无符号FREQ         =      0x08,    --线电压频率寄存器STATUS       =      0x09,    --状态寄存器---------用户操作寄存器(读写)--------------------I_RMSOS       =      0x12,    --电流有效值小信号校正寄存器WA_CREEP      =      0x14,    --有功功率防潜寄存器I_FAST_RMS_TH =      0x15,    --电流快速有效值阈值寄存器I_FAST_RMS_CYC=      0x16,    --电流快速有效值刷新周期寄存器FREQ_CYC      =      0x17,    --线电压频率刷新周期寄存器OT_FUNX       =      0x18,   --输出配置寄存器MODE          =      0x19,    --用户模式选择寄存器GAIN_CR       =      0x1A,    --电流通道增益控制寄存器SOFT_RESET    =      0x1C,    --写入 0x5A5A5A 时,用户区寄存器复位USR_WRPROT    =      0x1D    --用户写保护设置寄存器。--写入0x55后,用户操作寄存器可以写入;--写入其他值,用户操作寄存器区域不可写入},__newindex = function() end
})local function Check_ConStat(HEAD,address,data0_7,data8_15,data16_23)local sum=HEAD+address+data0_7+data8_15+data16_23local sumAnd=bit.band(sum,0xff)local checksum=bit.bnot(sumAnd)--这个输出位数大于2个字节,其十进制数位-207 十六进制:FFFF FFFF FFFF FF31local result=bit.band(checksum,0xff)--保证校验位1个字节,去除前面的14个FFreturn result;
endfunction BL0942_Read(ID,address)uart.write(ID,string.char(bl0942.READ_HEAD,address))
end
--function BL0942_Write(ID,address,data0_7,data8_15,data16_23)local checksum=Check_ConStat(bl0942.WRITE_HEAD,address,data0_7,data8_15,data16_23) uart.write(ID,string.char(bl0942.WRITE_HEAD,address,data0_7,data8_15,data16_23,checksum))
endreturn bl0942

    在修改特殊寄存器前,必须0X1D寄存器写入0x55。

        代码实现了读取全电数据包和0x19寄存器的功能,特别注意在分别解析串口返回的数据时,对数据的长度进行了判断,对不符合解析长度的数据包进行了丢弃,保证了数据的准确性。

    另外2个读取循环在延时时间上相互错开,避免遇到同时读取。

MODE=903 即0011 1000 0111,也就是[9:8]=11,波特率调整到了38400bps。

注意:交替循环读会出现电流显示600多ma的数据,目前我还没有解决,如果单独读取全电数据包能正常准确解析数据。读特殊寄存器一般用于调试阶段。

相关文章:

Luatos Air700 改变BL0942串口波特率

LuatOs 改变模块串口波特率思路参照 luatos 改变AIR530串口波特率 BL0942默认串口波特率可以通过SCLK_BPS引脚接3.3V电源设置到9600bps 但如果调整到38400bps需要修改0x19寄存器 bl0942 v1.06版的特殊寄存器说明&#xff0c;注意早期版本特殊寄存器说明存在错误 完整代码 mai…...

不可忽视的国外服务器地址IP选择指南

​  在如今互联网高速发展的时代&#xff0c;海外服务器扮演着重要的角色。选择合适的国外服务器IP地址却是一项复杂而又关键的任务。本文将为您介绍一些不可忽视的国外服务器地址IP选择指南。 私有IP地址&#xff1a; 私有IP地址是指在局域网内使用的IP地址&#xff0c;用于…...

C语言 预处理详解

目录 1.预定义符号 2.#define 2.1#define 定义标识符 2.2#define 定义宏 2.3#define 替换规则 2.4#和## 2.4.1# 的作用 2.4.2## 的作用 2.5 带有副作用的宏参数 2.6宏和函数的对比 对比 **2.7内联函数 2.8命名约定 3.#undef **4.命令行定义 5.条件编译 常…...

c++ async 使用详解,创建异步任务的多种方法

c async 使用详解 std::async 头文件 #include <future>。 函数原型&#xff1a; template<class Function, class... Args> std::future<std::invoke_result_t<std::decay_t<Function>,std::decay_t<Args>...>>async(std::launch polic…...

万物皆数——用matlab求解二阶微分方程

一、背景 毕达哥拉斯的“万物皆数”哲学观点表达了一个理念&#xff0c;即宇宙万物都可以通过数学语言来描述&#xff0c;数是万物的本原。 勾股定理就是毕达哥拉斯提出&#xff0c;因此在西方勾股定理也被叫做毕达哥拉斯定理。 工科类的专业&#xff0c;越到后面越感觉到数学…...

jmeter接口自动化部署jenkins教程

首先&#xff0c;保证本地安装并部署了jenkins&#xff0c;jmeter&#xff0c;xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意&#xff1a;原理是&#xff0c;jmeter自生成的报告jtl文件&#xff0c;通过xslproc工具&#xff0c;再结合jmeter自带的模板修改&…...

前端js实现将数组对象组装成自己需要的属性,或者去掉对象中不必要的属性

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 需求&#xff1a;前端js实现将数组对象组装成自己需要的属性&#xff0c;或者前端js实现去掉对象中不必要的属性 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、示例数组对象…...

MeterSphere 任意文件读取漏洞(CVE-2023-25814)

MeterSphere 任意文件读取漏洞&#xff08;CVE-2023-25814&#xff09; 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: title"MeterSphere" 漏洞复现1. 构造poc2. 发送数据包3. 查看文件 免责声明 仅用于技术交流,目的是向相关安全人员展示漏洞利用方式,以便更好地…...

设计模式-01-单例设计模式

经典的设计模式有23种&#xff0c;但是常用的设计模式一般情况下不会到一半&#xff0c;我们就针对一些常用的设计模式进行一些详细的讲解和分析&#xff0c;方便大家更加容易理解和使用设计模式。 1-为什么要使用单例 单例设计模式&#xff08;Singleton Design Pattern&…...

霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?

霍尔电流传感器广泛应用于航空航天、电源监测、飞行器状态监测、变速驱动设备、焊接设备供电电源、新能源汽车蓄电池管理系统等领域&#xff0c;在电流检测领域中有着重要地位和实用价值&#xff0c;在电驱系统中被称为新能源汽车的动力“心脏”。因此&#xff0c;霍尔电流传感…...

pandas按行按列遍历Dataframe的三种方式

遍历数据有以下三种方法&#xff1a; 简单对上面三种方法进行说明&#xff1a; iterrows(): 按行遍历&#xff0c;将DataFrame的每一行迭代为(index, Series)对&#xff0c;可以通过row[name]对元素进行访问。 itertuples(): 按行遍历&#xff0c;将DataFrame的每一行迭代为元…...

Api接口如何防止被刷?

现在越来越多的应用程序和服务都提供了API接口&#xff0c;使得开发人员可以方便地与这些应用程序和服务进行交互。但是&#xff0c;由于API接口是公开的&#xff0c;因此很容易被黑客利用&#xff0c;对系统造成损害。为了确保API接口的安全性&#xff0c;我们需要采取一些措施…...

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…...

Django知识点

目录 一、三板斧的使用 二、全局配置文件 三、静态文件的设置 四、request对象的方法 五、pycharm链接数据库 六、Django链接数据库 七、orm介绍 一、三板斧的使用 三个方法&#xff1a; HttpResponse renderredirect def index(request):print(request)return HttpR…...

基于单片机设计的智能风扇(红外线无线控制开关调速定时)

一、项目介绍 在炎热的夏季&#xff0c;风扇成为人们室内生活中必不可少的电器产品。然而&#xff0c;传统的风扇控制方式存在一些不便之处&#xff0c;比如需要手动操作开关、无法远程控制和调速&#xff0c;以及缺乏定时功能等。为了解决这些问题&#xff0c;设计了一款基于…...

k8s报错pause 3.2 解决方案

报错 Failed to create pod sandbox: rpc error: code Unknown desc failed to get sandbox image "k8s.gcr.io/pause:3.2": failed to pull image "k8s.gcr.io/pause:3.2": failed to pull and unpack image "k8s.gcr.io/pause:3.2": failed…...

基于遗传算法的电器分类,基于GA的电器分类

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 展望 完整代码下载链接:基于遗传算法的电器识别,基于遗传算法的电器分类(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88506649 背影 电器…...

某XX自考小程序的AES加密分析

前言 主要是报了自考在这个小程序上面做题&#xff0c;就研究了一下这个接口本文仅供学习交流使用&#xff0c;请勿随意传播。如有侵犯你的权益及时联系我删除。 一、抓包分析打开小程序&#xff0c;打开devtools 工具&#xff0c;这里就不啰嗦&#xff0c;直接上过程。 点击…...

加密算法笔记

MD5: 目前相对容易破解&#xff0c;且容易发生碰撞; 不可逆(但是网络上有很多破解方法) SHA256: 不会碰撞; 可以加盐&#xff0c;也可以不加盐; 不可逆; HmacSHA256在线加密-HmacMD5加密-散列哈希HASH加密工具 相同点 1、都是密码散列函数&#xff0c;加密不可逆。 2、都可…...

Sa-Token拦截全部接口必须登录-然后自定义注解来匿名登录-作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:

场景 在博主目前正在开发的项目中&#xff0c;就采用了Sa-Token作为权限框架支持&#xff0c;并且同时使用了注解和路由的拦截器模式&#xff0c;此部分的配置如下&#xff1a; Override public void addInterceptors(InterceptorRegistry registry) { List<String> n…...

MyBatis-Plus 3.5升级后,分页插件PaginationInterceptor报错?手把手教你换成PaginationInnerInterceptor

MyBatis-Plus 3.5升级后分页插件报错全解析&#xff1a;从问题定位到完美修复 最近在升级MyBatis-Plus到3.5版本后&#xff0c;不少开发者发现原本运行良好的分页功能突然报错&#xff0c;控制台抛出各种异常信息。这实际上是MyBatis-Plus团队对分页机制进行了重构导致的兼容性…...

D3KeyHelper终极指南:暗黑3玩家的5分钟自动化配置教程

D3KeyHelper终极指南&#xff1a;暗黑3玩家的5分钟自动化配置教程 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 你是否厌倦了在暗黑破坏神3中反复点…...

SpyGlass CDC检查避坑指南:为什么你的abstract port模型总报错?

SpyGlass CDC检查避坑指南&#xff1a;为什么你的abstract port模型总报错&#xff1f; 在数字芯片设计验证中&#xff0c;CDC&#xff08;Clock Domain Crossing&#xff09;检查是确保设计可靠性的关键环节。而面对复杂IP或黑盒模块时&#xff0c;抽象模型&#xff08;abstra…...

5G下行数据通道全解析:从DL-SCH到PDSCH的映射与DMRS配置

1. 5G下行数据传输的核心流程 当你用手机刷视频时&#xff0c;数据是怎么从基站传到手机里的&#xff1f;这背后是5G下行数据传输的一整套精密机制。简单来说&#xff0c;基站先把数据打包成DL-SCH&#xff08;下行共享信道&#xff09;&#xff0c;然后通过PDSCH&#xff08;物…...

跨越数字边界的文化守护者:AO3-Mirror-Site开源镜像网络革命

跨越数字边界的文化守护者&#xff1a;AO3-Mirror-Site开源镜像网络革命 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 当一位中国同人创作者在深夜试图访问AO3却遭遇连接失败&#xff0c;当一位研究者需要引用特定同…...

2010-2024年上市公司供应链风险感知数据

关税战烈度的持续上升对全球供应链体系造成了持续性波动&#xff0c;由此衍生出了大量各方面复杂性与不确定性。基于此&#xff0c;上市公司管理层会格外关注在该背景下&#xff0c;各种相关供应链的风险对其投资效率的影响。因此&#xff0c;研究上市公司管理层供应链风险感知…...

Voxtral-4B-TTS-2603开源镜像教程:免编译、免依赖、免环境配置的一键部署

Voxtral-4B-TTS-2603开源镜像教程&#xff1a;免编译、免依赖、免环境配置的一键部署 1. 平台介绍 Voxtral-4B-TTS-2603是Mistral发布的开源语音合成模型&#xff0c;专为语音助手等生产环境设计。这个镜像将其封装为即开即用的Web工具&#xff0c;无需任何技术背景就能轻松生…...

Rust的匹配中的模式守卫与变量屏蔽在复杂条件分支中的逻辑清晰性

Rust的匹配机制以其强大的表达能力和安全性著称&#xff0c;其中模式守卫与变量屏蔽是处理复杂条件分支时的两大利器。它们不仅能让代码逻辑更清晰&#xff0c;还能减少嵌套层次&#xff0c;提升可维护性。对于开发者而言&#xff0c;掌握这两种特性意味着能以更优雅的方式处理…...

SpringBoot+Vue饮食营养管理信息系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...

RTX 30系显卡救星:保姆级教程搞定Windows下TensorFlow 2.4.0 GPU环境(含Pillow版本避坑)

RTX 30系显卡救星&#xff1a;保姆级教程搞定Windows下TensorFlow 2.4.0 GPU环境&#xff08;含Pillow版本避坑&#xff09; 最近在帮同事配置TensorFlow 2.4.0 GPU环境时&#xff0c;发现30系显卡用户遇到的坑比想象中多得多。特别是那些看似莫名其妙的报错&#xff0c;比如&q…...