当前位置:   article > 正文

ESP32S3配置LORA(有人物联网)_esp32-s3 lora

esp32-s3 lora

最近使用ESP32配置做了LoRa的项目,将一些笔记和心得记录一下。

LoRa的工作模式主要有透传和定点传输两种模式,应该还有一个主从模式,但是我还没有使用过,我主要记录一下定点传输。

透传模式下通讯发送方和接收方需要满足三个条件:

1.速率等级一致

2.信道一致

3.目标地址相同或为广播地址

透传没啥可说的,说明书资料什么的很多,下面主要是说一下在定点通讯猜到的一些坑。

定点模式

定点模式在我的理解就是可以指定接收方(前提这个接收方是存在的),定点模式规定了数据格式的组成为:前两个字节是目标地址,第三个字节为目标信道,之后为数据包

(注:通信双方的速率等级必须一致),不然发送方都发完了,接收方还没有接收完呢

例:(有人的lora复制过来的)

示例:模块 A 以定点模式向模块 B 发送数据
1. 首先设置模块 A 为定点模式: AT+WMODE=FP
2. A B 模块 速率等级 设置一致: AT+SPD=10
3. 确认模块 B 的地址和信道,示例中模块 B 信道为 78 (0x4E) 地址为 6666 (0x1A0A)
4. 重启模块 A B
5. 模块 A 发送数据 (HEX 格式 ) 1A 0A 4E 31 32 33
6. B 模块会收到 31 32 33

接着说一下常用的AT指令

“+++”+“a”进入配置模式

 AT+WMODE 设置定点模式  

AT+SPD 设置速率等级

AT+ADDR  设置地址

AT+CH 设置信号

AT+Z 装置重启

代码部分 

这个是LoRa设置代码,我在配置LoRa最后一步加入了AT+Z指令,因为我懒得写退出配置模式的代码,主要每个指令的延时!!!

  1. HardwareSerial MySerial(0); //定义串口
  2. HardwareSerial MySerial1(1);
  3. #define UAST_write MySerial1.write
  4. #define UAST_available MySerial1.available
  5. #define UAST_read MySerial1.read
  6. #define UAST_println MySerial1.println
  7. #define UAST_print MySerial1.print
  8. /**************************************
  9. 函数名称:LoRa
  10. 函数功能:读取LoRa返回值
  11. 函数参数:地址、信道
  12. 函数返回值:lora接收到的字符串
  13. **************************************/
  14. String LoRa()
  15. {
  16. if(UAST_available()>0)
  17. {
  18. Lora="";
  19. while(UAST_available()>0)
  20. {
  21. Lora+=(char)UAST_read();
  22. delay(2);
  23. }
  24. }
  25. return Lora;
  26. }
  27. /**************************************
  28. 函数名称:setLoRa
  29. 函数功能:读取LoRa返回值
  30. 函数参数:地址、信道
  31. 函数返回值:lora接收到的字符串
  32. **************************************/
  33. bool setLoRa()
  34. {
  35. UAST_print("AT+ENTM\r\n");
  36. delay(50);
  37. while(1)
  38. {
  39. UAST_print("+++");
  40. delay(50);
  41. UAST_print("a");
  42. delay(50);
  43. MySerial.println("+++");
  44. String Lora=LoRa();
  45. const char* LORA=Lora.c_str();
  46. if(strstr(LORA,"OK")!=NULL) break;
  47. }
  48. while(1)
  49. {
  50. UAST_print("AT+WMODE=FP\r\n");
  51. delay(50);
  52. MySerial.println("wmode");
  53. String Lora=LoRa();
  54. const char* LORA=Lora.c_str();
  55. if(strstr(LORA,"OK")!=NULL) break;
  56. }
  57. while(1)
  58. {
  59. UAST_print("AT+CH=21\r\n");
  60. delay(50);
  61. MySerial.println("ch");
  62. String Lora=LoRa();
  63. const char* LORA=Lora.c_str();
  64. if(strstr(LORA,"OK")!=NULL) break;
  65. }
  66. while(1)
  67. {
  68. UAST_print("AT+SPD=10\r\n");
  69. delay(50);
  70. MySerial.println("spd");
  71. String Lora=LoRa();
  72. const char* LORA=Lora.c_str();
  73. if(strstr(LORA,"OK")!=NULL) break;
  74. }
  75. while(1)
  76. {
  77. UAST_print("AT+PWR=20\r\n");
  78. delay(50);
  79. MySerial.println("pwr");
  80. String Lora=LoRa();
  81. const char* LORA=Lora.c_str();
  82. if(strstr(LORA,"OK")!=NULL) break;
  83. }
  84. while(1)
  85. {
  86. UAST_print("AT+ADDR=8888\r\n");
  87. delay(50);
  88. MySerial.println("addr");
  89. String Lora=LoRa();
  90. const char* LORA=Lora.c_str();
  91. if(strstr(LORA,"OK")!=NULL) break;
  92. }
  93. while(1)
  94. {
  95. UAST_print("AT+Z\r\n");
  96. delay(50);
  97. MySerial.println("Z");
  98. String Lora=LoRa();
  99. const char* LORA=Lora.c_str();
  100. if(strstr(LORA,"OK")!=NULL) break;
  101. }
  102. return 1;
  103. }

数据发送代码

  1. extern HardwareSerial MySerial;
  2. extern HardwareSerial MySerial1;
  3. char str[]={0x22,0xB8,0x15,0x0d,0x11,0x00,0x11,0x0a};
  4. void setup() {
  5. MySerial.begin(115200);
  6. MySerial1.begin(115200,SERIAL_8N1,17,18);
  7. delay(20);
  8. k=setLoRa();
  9. while(k)
  10. {
  11. k=0;
  12. Tlag=1;
  13. }
  14. }
  15. void loop() {
  16. while (Tlag) {
  17. MySerial1.write(str,sizeof(str));
  18. delay(50);//这个东西very very very 重要!!!!
  19. }
  20. }

最后,有不懂的欢迎联系我,因为完整代码包含一些其他封装的函数,为了避免干扰思路,我就摘出来了lora部分 *********总之不懂得留下邮箱或者qq交流

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/774102?site
推荐阅读
相关标签
  

闽ICP备14008679号