Created
October 9, 2021 02:20
-
-
Save ikeating/abe4960d7253287d6d179e63a57eee09 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| Example for using the RFM9x Radio with Raspberry Pi. | |
| Learn Guide: https://learn.adafruit.com/lora-and-lorawan-for-raspberry-pi | |
| Author: Brent Rubell for Adafruit Industries | |
| """ | |
| # Import Python System Libraries | |
| import time | |
| # Import Blinka Libraries | |
| import busio | |
| from digitalio import DigitalInOut, Direction, Pull | |
| import board | |
| # Import the SSD1306 module. | |
| import adafruit_ssd1306 | |
| # Import RFM9x | |
| import adafruit_rfm9x | |
| # Button A | |
| btnA = DigitalInOut(board.D5) | |
| btnA.direction = Direction.INPUT | |
| btnA.pull = Pull.UP | |
| # Button B | |
| btnB = DigitalInOut(board.D6) | |
| btnB.direction = Direction.INPUT | |
| btnB.pull = Pull.UP | |
| # Button C | |
| btnC = DigitalInOut(board.D12) | |
| btnC.direction = Direction.INPUT | |
| btnC.pull = Pull.UP | |
| # Create the I2C interface. | |
| i2c = busio.I2C(board.SCL, board.SDA) | |
| # 128x32 OLED Display | |
| reset_pin = DigitalInOut(board.D4) | |
| display = adafruit_ssd1306.SSD1306_I2C(128, 32, i2c, reset=reset_pin) | |
| # Clear the display. | |
| display.fill(0) | |
| display.show() | |
| width = display.width | |
| height = display.height | |
| # Configure LoRa Radio | |
| CS = DigitalInOut(board.CE1) | |
| RESET = DigitalInOut(board.D25) | |
| spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) | |
| rfm9x = adafruit_rfm9x.RFM9x(spi, CS, RESET, 915.0) | |
| rfm9x.tx_power = 23 | |
| prev_packet = None | |
| enable_crc = None | |
| while True: | |
| packet = None | |
| # draw a box to clear the image | |
| display.fill(0) | |
| display.text('RasPi LoRa', 35, 0, 1) | |
| # check for packet rx | |
| packet = rfm9x.receive() | |
| if packet is None: | |
| display.show() | |
| display.text('- Waiting for PKT -', 15, 20, 1) | |
| else: | |
| # Display the packet text and rssi | |
| display.fill(0) | |
| prev_packet = packet | |
| packet_text = str(prev_packet, "utf-8") | |
| display.text('RX: ', 0, 0, 1) | |
| display.text(packet_text, 25, 0, 1) | |
| print(packet_text) | |
| time.sleep(1) | |
| rssi = rfm9x.last_rssi | |
| #print(rssi) | |
| print("Received signal strength: {0} dB".format(rssi)) | |
| dest = rfm9x.destination #The default destination address | |
| #for packet transmissions. (0-255). If 255 (0xff) then any receiving | |
| #node should accept the packet. Second byte of the RadioHead header. | |
| print("destination {0}".format (dest)) | |
| snr = rfm9x.last_snr | |
| print("snr {0}".format(snr)) | |
| bandwidth = rfm9x.signal_bandwidth | |
| print("bandwidth {0}".format (bandwidth)) | |
| spreadingFactor = rfm9x.spreading_factor | |
| print("spreading factor {0}".format (spreadingFactor)) | |
| preamble = rfm9x.preamble_length | |
| print("preamble {0}".format (preamble)) | |
| crcStatus = rfm9x.crc_error() | |
| print("crc status {0}".format (crcStatus)) | |
| identifier = rfm9x.identifier #Automatically set to the sequence number when send_with_ack() used. Third byte of the RadioHead header. | |
| print("identifier {0}".format (identifier)) | |
| node = rfm9x.node #The default address of this Node. (0-255). If not 255 (0xff) then only packets address to this node will be accepted. First byte of the RadioHead header. | |
| print("node {0}".format (node)) | |
| if not btnA.value: | |
| # Send Button A | |
| display.fill(0) | |
| button_a_data = bytes("Button A!\r\n","utf-8") | |
| rfm9x.send(button_a_data) | |
| display.text('Sent Button A!', 25, 15, 1) | |
| elif not btnB.value: | |
| # Send Button B | |
| display.fill(0) | |
| button_b_data = bytes("Button B!\r\n","utf-8") | |
| rfm9x.send(button_b_data) | |
| display.text('Sent Button B!', 25, 15, 1) | |
| elif not btnC.value: | |
| # Send Button C | |
| display.fill(0) | |
| button_c_data = bytes("Button C!\r\n","utf-8") | |
| rfm9x.send(button_c_data) | |
| display.text('Sent Button C!', 25, 15, 1) | |
| display.show() | |
| time.sleep(0.1) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment