code.py
 1  # SPDX-FileCopyrightText: 2019 Brent Rubell for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  import time
 6  import board
 7  import busio
 8  from digitalio import DigitalInOut
 9  import adafruit_bme280
10  from adafruit_tinylora.adafruit_tinylora import TTN, TinyLoRa
11  
12  # Unique feather identifier
13  FEATHER_ID = 1
14  
15  i2c = busio.I2C(board.SCL, board.SDA)
16  bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
17  
18  # TinyLoRa/RFM9x Setup
19  spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
20  # pylint: disable=c-extension-no-member
21  cs = DigitalInOut(board.RFM9X_CS)
22  irq = DigitalInOut(board.RFM9X_D0)
23  rst = DigitalInOut(board.RFM9X_RST)
24  
25  # TTN Device Address, 4 Bytes, MSB
26  devaddr = bytearray([0x00, 0x00, 0x00, 0x00])
27  
28  # TTN Network Key, 16 Bytes, MSB
29  nwkey = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
30                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
31  
32  # TTN Application Key, 16 Bytess, MSB
33  app = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
35  
36  ttn_config = TTN(devaddr, nwkey, app, country='US')
37  
38  lora = TinyLoRa(spi, cs, irq, rst, ttn_config, channel = 6)
39  
40  # bme data packet
41  bme_d = bytearray(7)
42  
43  while True:
44      # Grab sensor data
45      temp_val = int(bme280.temperature * 100)
46      humid_val = int(bme280.humidity * 100)
47  
48      bme_d[0] = FEATHER_ID
49      # Temperature data
50      bme_d[1] = (temp_val >> 8) & 0xff
51      bme_d[2] = temp_val & 0xff
52      # Humidity data
53      bme_d[3] = (humid_val >> 8) & 0xff
54      bme_d[4] = humid_val & 0xff
55  
56      print('Sending packet...')
57      lora.send_data(bme_d, len(bme_d), lora.frame_counter)
58      print('Packet sent!')
59      lora.frame_counter += 1
60      time.sleep(1 * 60)