前言
开发的过程中,用A39C-T400A22D1aLora模块作无线传输。这个项目之前的人都是用厂商的ASDS上位机软件,直接配置Lora模块,也确实能运作。
但是文档中还记载了直接给模块发送指令进行配置的方式,我打算试试。
配置方法优势劣势上位机界面直观,操作简单部署前需为模块单独费时间,参数难以保证无误指令配置快速部署,无须额外操作占用程序体积未来要是程序逻辑逐渐复杂,硬件装不下的话,没准儿得砍了指令配置这部分。
鉴于开发时一直没找到能抄的代码,也没什么思路(我是嵌入式新手)。
写这篇,一来记录,二来则算是填补网上资料的空缺吧。
(本文不会详细讲解的逻辑大概律在文档中说了,算是文档的补充与实现示例,文档还得自己读RTFM!)
干货
本文不会提关于接线、收发等。
参考资料:
- 模块文档下载(个人感觉这里最主要且有用的文档是a39c_t400a22d1a/A39C-T400A22D1a资料包/产品规格书/a39ct400a22d1acn.pdf)
- 我的代码仓库(仅供参考,lora相关文件与本文有关)
代码在Arduino上测试,但主要在于命令的构造,因为是类C语言,STM32什么的应该改改Serial相关的就行。
基本思路是依据文档第六部分,直接给模块发送配置等指令。
命令具体推导由上位机所发的命令依据文档逐位解析,参考图(很乱,仅参考):
构造通过宏定义实现,方便更改。预留寄存器部分直接抄的上位机软件发送到样本(不知道为什么预留寄存器好像对配置成败也有影响,没仔细测试过,待定)。
主命令定义:- const byte configCmd[] = {
- 0x80, 0x04, 0x1E, //cmd, 0x80 write local success, return if error
- LORA_BAUDRATE, //0x04
- LORA_SERIALARGS, //0x05
- LORA_TRANSARGS, //0x06
- LORA_WORKMODE, //0x07
- 0x05,0x03,0xE8, //0x08 to 0x09, preserved
- LORA_MAINORFOLLOW,//0x0A
- 0x77, 0x77, 0x77, 0x2E, 0x61, 0x73, 0x68, 0x69, 0x6E, 0x69, 0x6E, 0x67, 0x2E, 0x63, 0x6F, 0x6D, //0x0B, default, AES key
- 0x7C,0x7C,0x7C,0x7C,0x7C,0x05, //0x0C to 0x0D, preserved
- LORA_PACKSIZE, //0x0E
- 0x00,0x23,0x00,0x00,0x00,0x3C,0x3C, //0x0F to 0x13, preserved
- LORA_SLEEPTIME, //0x14
- 0x0A,0x19, //0x15 to 0x16, preserved
- 0x00, 0x80, //0x17, default, which is enable wireless wake code
- LORA_LOCGROUP, //0x18
- LORA_LOCADDR, //0x19
- LORA_TARGGROUP, //0x1A
- LORA_TARGADDR, //0x1B
- 0x00,0x00,0x00,0x00,0x17,0x02 //0x1C to 0x21, related to relay mode
- };
复制代码 宏定义示范:- // Baud Rate
- #define LORA_BAUDRATE 0x00, 0x00, 0x25, 0x80
- // LoraSerial Arguments
- #define LORA_SERIALARGS 0x00
- // Transmission Arguments
- #define LORA_CHANNEL 20
- #define LORA_TRANSARGS LORA_CHANNEL >> 3, (byte)(LORA_CHANNEL << 5) + 0b11010
- // Transmission Mode
- #define LORA_WORKMODE 0x00, 0x01
- // Main Mode or Follow Mode
- #define LORA_MAINORFOLLOW 0x00
- // Pack Size
- #define LORA_PACKSIZE 0x40
- // Sleep Time
- #define LORA_SLEEPTIME 0
- // Group & Addr
- // the target_group and target_addr is used in transparent mode
- #define LORA_LOCGROUP 0
- #define LORA_LOCADDR 0
- #define LORA_TARGGROUP 0
- #define LORA_TARGADDR 1
复制代码 这个遇到的问题(上位机软件也有此问题)是发送后报配置失败命令,经过实验,在配置前重置出厂设置即可,同样根据文档发送命令{0x80, 0x23, 0x01}重置。最好在发送这两个命令前再加一个握手命令{0, 0, 1}检查模块可用性。具体代码不放这了,仍然是发送,等待,检查的逻辑,示例可以看参考资料里的代码仓库。
结语
嵌入式这种硬件活,给我最大印象就是玄学(机魂不悦)。纯软件环境(尤其高级编程语言)就像在温室里,软件转硬件还是十分有挑战性的(有一次调了半个小时连不上模块,拿别的测试才发现模块是坏的)。但是不要怕,多看文档,多做实验,用点AI,问题会解决的,经验也就多了。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |