ESP8266 LoRa网关第一步:SPI总线

ESP8266 LoRa网关第一步:SPI总线_第1张图片
logic_spi_esp8266_arduino.png

之前一直有看到PyCom开发的基于MicroPython/ESP32的LoRa网关,但是也没有测试过。最近看到国内有卖ESP32/LoRa模块的设计,但是买来一看,LoRa部分也是非常简单的设计。而且该设计除了营销上很有一套,总的来说,技术含量不够高。

  • 技术选型:采用ESP32我觉得有些纠结,低功耗ESP32抵不上其他供应商的功耗,不如用Wi-Fi,而Wi-Fi不如ESP8266。不过ESP32内置LDO/PMU有很赞。
  • 外型尺寸:板子过于密集,OLED的FPC紧贴着焊盘,给开发者焊接带来难度。
  • 完整度:BLE部分不完整,Wi-Fi没有对接某个云端,LoRa驱动也不完整。

ESP8266 SPI driver for Arduino

由于模块自身占用了SPI和串口,而芯片自身引脚也不够,许多功能都是复用引脚的。而ESP8266-12F模块不提供内电路,所以需要横向比较许多资料。最终得出结论:12F模块中SPI提供给了内部SPI闪存,而将HSPI留给了用户。

早前ESP8266的相关资料很杂散,IC原厂和模块供应商资料版本都存在很多差异。现在基于Arduino倒是省了很多事情。

源码

查阅了Github上的源码,编写了以下的测试代码。

/*
 * SPI test code for SX1278 module, in order to port all LoRa stack to Arduino
 * 
 * ESP8266/Arduino: https://github.com/esp8266/Arduino
 * Reference code: https://www.arduino.cc/en/Tutorial/BarometricPressureSensor
 * 
 */
 
#include 

#define SPI_CLOCK (1000000)

const int d0 = 6;
const int rst = 7;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  delay(10);
  SPI.setFrequency(SPI_CLOCK);
  SPI.setHwCs(true);

}

void loop() {
  // put your main code here, to run repeatedly:
  // Serial.println("Write 0x55, Read 0xAA");
  SPI.begin();
  SPI.write(0x00);
  SPI.write(0x05);
  SPI.write(0x55);
  SPI.write(0x5A);
  SPI.write(0xA0);
  SPI.write(0xAA);
  SPI.write(0xF0);
  SPI.write(0xFF);
  //SPI.transfer(0xAA);
  SPI.end();
  delay(50);

}

进过逻辑分析仪验证,SPI工作正常。接下来就是将LoRa官方驱动以及LoRaWAN的高层协议移植到现有平台,然后对接MQTT。

你可能感兴趣的:(ESP8266 LoRa网关第一步:SPI总线)