
logic_spi_esp8266_arduino.png
之前一直有看到PyCom開發(fā)的基于MicroPython/ESP32的LoRa網(wǎng)關,但是也沒有測試過。最近看到國內有賣ESP32/LoRa模塊的設計,但是買來一看,LoRa部分也是非常簡單的設計。而且該設計除了營銷上很有一套,總的來說,技術含量不夠高。
- 技術選型:采用ESP32我覺得有些糾結,低功耗ESP32抵不上其他供應商的功耗,不如用Wi-Fi,而Wi-Fi不如ESP8266。不過ESP32內置LDO/PMU有很贊。
- 外型尺寸:板子過于密集,OLED的FPC緊貼著焊盤,給開發(fā)者焊接帶來難度。
- 完整度:BLE部分不完整,Wi-Fi沒有對接某個云端,LoRa驅動也不完整。
ESP8266 SPI driver for Arduino
由于模塊自身占用了SPI和串口,而芯片自身引腳也不夠,許多功能都是復用引腳的。而ESP8266-12F模塊不提供內電路,所以需要橫向比較許多資料。最終得出結論:12F模塊中SPI提供給了內部SPI閃存,而將HSPI留給了用戶。
早前ESP8266的相關資料很雜散,IC原廠和模塊供應商資料版本都存在很多差異?,F(xiàn)在基于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的高層協(xié)議移植到現(xiàn)有平臺,然后對接MQTT。