LoRa MicroPython驱动

作者: 小鱼儿他老汉 | 来源:发表于2018-04-05 08:33 被阅读128次

    之前我用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驱动

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