之前一直有看到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 <SPI.h>
#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。
网友评论