代码之家  ›  专栏  ›  技术社区  ›  tru

Waveshare SX1262 LoRaWAN帽子

  •  0
  • tru  · 技术社区  · 1 年前

    有人知道Python库可以与 Waveshare SX1262 LoRaWAN Node Module ?

    我的目标是通过LoRa(WAN?)从一个到另一个树莓派进行通信。由于这些帽子确实有SPI接口,我没有发现太多用于通信的东西(大多数帖子都使用UART风格的接口)。我已经能够与hat进行通信,并使用Python获取状态。

    #!/usr/bin/env python
    
    import time
    
    import spidev
    import RPi.GPIO as GPIO
    
    # SX1262 pinout (BCM)
    PIN_MOSI = 10
    PIN_MISO = 9
    PIN_CLK = 11
    PIN_CS = 21
    PIN_DIO1 = 16
    PIN_DIO4 = 6
    PIN_BUSY = 20
    PIN_RST = 18
    
    class SX1262:
        pin_cs = 21
        pin_dio1 = 16
        pin_dio4 = 6
        pin_busy = 20
        pin_rst = 18
    
        def __init__(self):
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(self.pin_cs, GPIO.OUT)
            GPIO.setup(self.pin_rst, GPIO.OUT)
            GPIO.setup(self.pin_dio1, GPIO.IN)
            GPIO.setup(self.pin_dio4, GPIO.IN)
            GPIO.setup(self.pin_busy, GPIO.IN)
    
            # Disable CS
            GPIO.output(self.pin_cs, GPIO.HIGH)
    
            # Reset SX1262
            GPIO.output(self.pin_rst, GPIO.LOW)
            time.sleep(0.1)
            GPIO.output(self.pin_rst, GPIO.HIGH)
    
            # Setup SPI interface
            self.spi = spidev.SpiDev()
            self.spi.open(0, 0)
            self.spi.no_cs = True
            self.spi.max_speed_hz = 1000000
    
        def __del__(self):
            self.spi.close()
            GPIO.cleanup()
    
        def send_raw(self, bytez):
            GPIO.output(self.pin_cs, GPIO.LOW)
            resp = self.spi.xfer2(bytez)
            GPIO.output(self.pin_cs, GPIO.HIGH)
            return resp
    
        def read_buffer(self):
            return self.send_raw([0x1E, 0x00])
    
        def get_status(self):
            return self.send_raw([0xC0])
    
        def get_packet_status(self):
            return self.send_raw([0x14])
    
        def get_stats(self):
            return self.send_raw([0x10])
    
    
    def main():
        sx1262 = SX1262()
    
        try:
            while True:
                print("GetStatus")
                for b in sx1262.get_status():
                    print(hex(b))
                print("GetPacketStatus")
                for b in sx1262.get_packet_status():
                    print(hex(b))
                print("ReadBuffer")
                for i in range(5):
                    for b in sx1262.read_buffer():
                        print(hex(b))
                print()
                time.sleep(1.0)
        except KeyboardInterrupt:
            pass
        del sx1262
    
    
    if __name__ == "__main__":
        main()
    

    但也许已经有了一个库,实现它会比自己实现它容易得多?

    0 回复  |  直到 1 年前