LoRa MicroPython驱动

之前我用dcexpert(武汉老肖)的PyBoard Lite的SPI去测试SX1278的开发板,出现两个问题:

  1. SPI总线返回数据出错;
  2. 从逻辑分析仪上看,SPI总线上多出一个字节。

今天总算是搞定了,其实都是我自己不熟悉所导致的。

代码

from pyb import SPI, Pin

spi = SPI(1, SPI.MASTER, baudrate=100000, polarity=0, phase=0)
cs = Pin('X8',Pin.OUT)

def func(method=0):
    buf = bytearray(2)
    cs.low()    
    if method==0:
        r = spi.send_recv(b'\x42\x00',2)
    elif method==1:
        #spi.write_readinto(b'\x42\x00',buf)
        spi.send_recv(b'\x42\x00', buf)
    cs.high()
    print(r)
    pyb.delay(100)

def main():
    func(0)
    func(1)
    

解释

SPI总线 返回数据出错是因为总线配置polarity错误,SX1278要求为0,而我配置成1;

SPI总线 多返回一个字节,因为我照抄教程,多配置了一个CRC字节,忽略该参数即为None。

至于spi.write_readinto()和spi.send_recv(),使用下来好像是一样的,可能是别名而已。

总结

所以,STM32的Pyboard访问NB-IoT/LoRa都没有问题,而ESP8266目前访问SPI总线还存在问题,有待进一步挖掘。不过ESP8266的GPIO实在太少了,要么外面加一颗I2C GPIO扩展或MCU,要么直接用ESP32了。

ESP8266更新

经过测试,ESP8266的代码也可以运行了。

from machine import Pin, SPI

def spi_demo():
    cs = Pin(15, Pin.OUT)
    hspi = SPI(1, baudrate=1000000, polarity=0, phase=0)
    ob = b'\\x42\\x00'
    buf = bytearray(2)

    cs.value(0)
    hspi.write_readinto(ob, buf)
    cs.value(1)
    print('buf', buf)

    if 0x12 == buf[1]:
        print('LoRa chip detected')
    else:
        print('Check SPI connection')

def main():
    spi_demo()

即便是ESP8266的HSPI,也需要单独定义一下CS引脚,否则我的实验结果居然还是无法实现硬件的CS下来,即便是同一GPIO。

你可能感兴趣的:(LoRa MicroPython驱动)