美文网首页LoRa相关LPWAN设计
ESP8266 LoRa网关第一步:SPI总线

ESP8266 LoRa网关第一步:SPI总线

作者: 小鱼儿他老汉 | 来源:发表于2017-11-19 08:07 被阅读1088次
    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 <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。

    相关文章

      网友评论

        本文标题:ESP8266 LoRa网关第一步:SPI总线

        本文链接:https://www.haomeiwen.com/subject/czkuvxtx.html