code.py
 1  # SPDX-FileCopyrightText: 2018 Brent Rubell for Adafruit Industries
 2  #
 3  # SPDX-License-Identifier: MIT
 4  
 5  """Using TinyLoRa with a Si7021 Sensor.
 6  """
 7  import time
 8  import busio
 9  import digitalio
10  import board
11  import adafruit_si7021
12  from adafruit_tinylora.adafruit_tinylora import TTN, TinyLoRa
13  
14  # Board LED
15  led = digitalio.DigitalInOut(board.D13)
16  led.direction = digitalio.Direction.OUTPUT
17  
18  # Create library object using our bus i2c port for si7021
19  i2c = busio.I2C(board.SCL, board.SDA)
20  sensor = adafruit_si7021.SI7021(i2c)
21  
22  # Create library object using our bus SPI port for radio
23  spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
24  
25  # RFM9x Breakout Pinouts
26  cs = digitalio.DigitalInOut(board.D5)
27  irq = digitalio.DigitalInOut(board.D6)
28  rst = digitalio.DigitalInOut(board.D4)
29  
30  # Feather M0 RFM9x Pinouts
31  # cs = digitalio.DigitalInOut(board.RFM9X_CS)
32  # irq = digitalio.DigitalInOut(board.RFM9X_D0)
33  # rst = digitalio.DigitalInOut(board.RFM9X_RST)
34  
35  # TTN Device Address, 4 Bytes, MSB
36  devaddr = bytearray([0x00, 0x00, 0x00, 0x00])
37  
38  # TTN Network Key, 16 Bytes, MSB
39  nwkey = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
40                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
41  
42  # TTN Application Key, 16 Bytess, MSB
43  app = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
44                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
45  
46  ttn_config = TTN(devaddr, nwkey, app, country='US')
47  
48  lora = TinyLoRa(spi, cs, irq, rst, ttn_config)
49  
50  # Data Packet to send to TTN
51  data = bytearray(4)
52  
53  while True:
54      temp_val = sensor.temperature
55      humid_val = sensor.relative_humidity
56      print('Temperature: %0.2f C' % temp_val)
57      print('relative humidity: %0.1f %%' % humid_val)
58  
59      # Encode float as int
60      temp_val = int(temp_val * 100)
61      humid_val = int(humid_val * 100)
62  
63      # Encode payload as bytes
64      data[0] = (temp_val >> 8) & 0xff
65      data[1] = temp_val & 0xff
66      data[2] = (humid_val >> 8) & 0xff
67      data[3] = humid_val & 0xff
68  
69      # Send data packet
70      print('Sending packet...')
71      lora.send_data(data, len(data), lora.frame_counter)
72      print('Packet Sent!')
73      led.value = True
74      lora.frame_counter += 1
75      time.sleep(2)
76      led.value = False