ESP8266 LoRa網(wǎng)關第一步:SPI總線

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。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容