Skip to content

Commit b7ce1c4

Browse files
Add initial LoRa Chat app
1 parent 2ca71a2 commit b7ce1c4

3 files changed

Lines changed: 103 additions & 0 deletions

File tree

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "LoRa Chat",
3+
"publisher": "MicroPythonOS",
4+
"short_description": "Chat using LoRa",
5+
"long_description": "Send messages back and forth with your friends using LoRa.",
6+
"icon_url": "https://apps.micropythonos.com/apps/com.micropythonos.lora_chat/icons/com.micropythonos.lora_chat_0.0.5_64x64.png",
7+
"download_url": "https://apps.micropythonos.com/apps/com.micropythonos.lora_chat/mpks/com.micropythonos.lora_chat_0.0.5.mpk",
8+
"fullname": "com.micropythonos.lora_chat",
9+
"version": "0.0.5",
10+
"category": "development",
11+
"activities": [
12+
{
13+
"entrypoint": "assets/lora_chat.py",
14+
"classname": "LoRaChat",
15+
"intent_filters": [
16+
{
17+
"action": "main",
18+
"category": "launcher"
19+
}
20+
]
21+
}
22+
]
23+
}
24+
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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")
8.59 KB
Loading

0 commit comments

Comments
 (0)