智能酒桶-arduino+lora通信
发布于 4 个月前 作者 zouzhenxing 604 次浏览 来自 分享

邹振兴的知乎专栏 智能酒桶方案传送门 购买的模块终于到齐了,来个接线图: image.png 第一步:通过官方工具,将lora模块进行初始化,注意一定要选定点传输方式,我一开始不知道在这里搞了好久。第一个模块设置地址为1,这个模块到时接树莓派,第二个模块设置地址为2,接到arduino上。 image.png 第二步:接线,这步要注意,lora模块有m0,m1两根针,用来控制模式的,如果不用,一定要接地,这里我也尝试了好久。 第三步:编写通信代码,我要实现一个简单的功能,01模块向02模块发送一个指令,arduino验证指令完整后向01模块响应。多话不说,直接上代码:

#include <SoftwareSerial.h>

SoftwareSerial rolaSerial(2, 3); // 电流表数据通讯TTL RX, TX
String cmdBuffer = ""; // 命令缓存
int loggerLevel = 1; // 日志级别
char szTmp[3]; // 串口读取
unsigned char channel = 0x04; // 信道

void setup() {
  Serial.begin(9600);
  rolaSerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  // 读取串口指令到buffer
  if(rolaSerial.available() > 0) {
    digitalWrite(LED_BUILTIN, HIGH);
  }
  while (rolaSerial.available() > 0)  
  {
    sprintf( szTmp, "%02X", (unsigned char) rolaSerial.read() );
    cmdBuffer += szTmp;
    delay(2);
  }
  digitalWrite(LED_BUILTIN, LOW);
  
  if(cmdBuffer.length() > 0) {
    parseBuffer();
  }
}

void parseBuffer() {
  // 长度超过2048,清空
  if(cmdBuffer.length() > 2048) {
    cmdBuffer = "";
    logger("size out 2048");
    return;
  }
  
  // 查找AA333380
  int start = cmdBuffer.indexOf("AA333380");
  if(start > 0) {
    cmdBuffer = cmdBuffer.substring(start);
  } else if(start == -1) {
    return;
  }
  
  // 查找FCFF
  String temp = "";
  int end = cmdBuffer.indexOf("FCFF");
  if(end != -1) {
    temp = cmdBuffer.substring(0, end + 4);
    cmdBuffer = cmdBuffer.substring(end + 4);
    sendReturn();
  }
  
  String cmdstr = temp.substring(8, 12);
  String data = temp.substring(12, temp.length() - 4);
  if(cmdstr.equals("0001")) {
    logger(data);
  }
}

// 收到信息号响应
void sendReturn() {
  unsigned char dest[11] = {0x00, 0x01, channel, 0xBB, 0x66, 0x66, 0x80, 0xFF, 0xFF, 0xFc, 0xFF};
  rolaSerial.write(dest, 11);
}

void logger(String str) {
  if(loggerLevel) {
    Serial.println(str); 
  }
}

第四步:测试 连通性测试,发送一条,响应一条 image.png 压力测试: 定时发送设置为100,200,300,400,在100ms情况下,模块接收到数据错乱。300以后正常,但偶尔发生不回复的情况,500ms较为稳定。 因为lora模块是通过无线电来传输的,首先,传输的数据不能太多。第二,需要一点时间。所 以确定500ms为一次通信较为稳定。

距离与稳定性测试: 官方数据说在3KM之内通信,我测试了在1-2KM,是正常的,再远没测试过了。电梯内也可以正常收发,在电梯运动时会偶尔收发失败。

lora通信基本测试成功,下一步使用树莓派开发中继器。下个星期继续努力

回到顶部