|
| 1 | +from mpos import Activity, TaskManager |
| 2 | + |
| 3 | +import mpos |
| 4 | + |
| 5 | +class LoRaChat(Activity): |
| 6 | + |
| 7 | + alltext = "" |
| 8 | + |
| 9 | + # Widgets: |
| 10 | + messages = None |
| 11 | + |
| 12 | + def onCreate(self): |
| 13 | + screen = lv.obj() |
| 14 | + self.messages = lv.label(screen) |
| 15 | + self.messages.set_text('Messages should appear here!') |
| 16 | + self.messages.center() |
| 17 | + self.messages.set_long_mode(lv.label.LONG_MODE.WRAP) |
| 18 | + self.messages.align(lv.ALIGN.TOP_LEFT, 0, 0) |
| 19 | + self.setContentView(screen) |
| 20 | + |
| 21 | + def onResume(self, screen): |
| 22 | + super().onResume(screen) |
| 23 | + print("LoRa Chat foregrounded, starting receive_thread") |
| 24 | + import _thread |
| 25 | + _thread.stack_size(TaskManager.good_stack_size()) |
| 26 | + _thread.start_new_thread(self.receive_thread, ()) |
| 27 | + |
| 28 | + def onPause(self, screen): |
| 29 | + super().onPause(screen) |
| 30 | + print("LoRa Chat backgrounded, putting LoRa to sleep") |
| 31 | + mpos.sx.sleep(retainConfig=False) |
| 32 | + |
| 33 | + def receive_thread(self): |
| 34 | + print("starting lora in 3 seconds") |
| 35 | + import time |
| 36 | + time.sleep(5) |
| 37 | + # test LoRa |
| 38 | + from drivers.lora.sx1262 import SX1262 |
| 39 | + from machine import Pin, SPI |
| 40 | + rf_sw = Pin(46, Pin.OUT) |
| 41 | + rf_sw.value(1) ; print("RF_SW set to HIGH") # Logic high level means enable receiver mode |
| 42 | + |
| 43 | + sx = mpos.sx |
| 44 | + |
| 45 | + sx.begin(freq=869.618, bw=62.5, sf=8, cr=8, syncWord=0x12, preambleLength=8, implicit=False, crcOn=True, tcxoVoltage=3.0, useRegulatorLDO=False, blocking=True) |
| 46 | + |
| 47 | + rf_sw.value(1) ; print("RF_SW set to HIGH") |
| 48 | + |
| 49 | + sx.setDio2AsRfSwitch(False) |
| 50 | + |
| 51 | + rf_sw.value(1) ; print("RF_SW set to HIGH") |
| 52 | + |
| 53 | + import time |
| 54 | + while self.has_foreground(): |
| 55 | + try: |
| 56 | + print("sx.recv") |
| 57 | + msg, err = sx.recv() |
| 58 | + #msg, err = sx.recv(timeout_en=True, timeout_ms=1000) |
| 59 | + print("after sx.recv") |
| 60 | + if len(msg) > 0: |
| 61 | + print(msg) |
| 62 | + self.alltext += "Message: " + msg.hex() + "\n" |
| 63 | + lv.async_call(lambda _: self.messages.set_text(self.alltext), None) |
| 64 | + else: |
| 65 | + print("len(msg) was 0") |
| 66 | + status = SX1262.STATUS[err] |
| 67 | + print(f"status: {status}") |
| 68 | + print(f"getRSSI: {sx.getRSSI()}") |
| 69 | + print(f"getSNR: {sx.getSNR()}") |
| 70 | + print(f"getStatus: {sx.getStatus()}") |
| 71 | + print(f"getPacketStatus: {sx.getPacketStatus()}") |
| 72 | + |
| 73 | + print("Sending...") |
| 74 | + result = sx.send(b"BLAAAA") |
| 75 | + print(f"send result: {result}") |
| 76 | + except Exception as e: |
| 77 | + print(f"receive_thread got exception: {e}") |
| 78 | + |
| 79 | + print("receive_thread stopped") |
0 commit comments