included tutorial on nvram usage

This commit is contained in:
gijsio
2020-12-04 10:46:03 +01:00
committed by peter-pycom
parent f713aad834
commit fecefb89f0
3 changed files with 62 additions and 4 deletions

View File

@@ -302,6 +302,12 @@ theme = "doc-theme"
identifier = "tutorials@networks@lora@module-module"
parent = "tutorials@networks@lora"
weight = 60
[[menu.main]]
name = "nvram"
url = "/tutorials/networks/lora/nvram/"
identifier = "tutorials@networks@lora@nvram"
parent = "tutorials@networks@lora"
weight = 70
[[menu.main]]
name = "LTE"

View File

@@ -222,18 +222,16 @@ lora.callback(trigger=(LoRa.RX_PACKET_EVENT | LoRa.TX_PACKET_EVENT), handler=lor
Save the LoRaWAN state (joined status, network keys, packet counters, etc) in non-volatile memory in order to be able to restore the state when coming out of deepsleep or a power cycle.
```python
lora.nvram_save()
```
### lora.nvram_restore()
Restore the LoRaWAN state (joined status, network keys, packet counters, etc) from non-volatile memory. State must have been previously stored with a call to `nvram_save` before entering deepsleep. This is useful to be able to send a LoRaWAN message immediately after coming out of deepsleep without having to join the network again. This can only be used if the current region matches the one saved.
Restore the LoRaWAN state (joined status, network keys, packet counters, etc) from non-volatile memory. State must have been previously stored with a call to `nvram_save` before entering deepsleep. This is useful to be able to send a LoRaWAN message immediately after coming out of deepsleep without having to join the network again. This can only be used if the current region matches the one saved. Note that the nvram will be cleared after using this method.
### lora.nvram_erase()
Remove the LoRaWAN state (joined status, network keys, packet counters, etc) from non-volatile memory.
See the [tutorials](/tutorials/networks/lora/nvram/) for an example on how to use nvram
### lora.mesh()

View File

@@ -0,0 +1,54 @@
---
title: "non-volatile RAM"
aliases:
- tutorials/lora/nvram.html
- tutorials/lora/nvram.md
- chapter/tutorials/lora/nvram
---
See the example below on how to use the lora nvram methods:
```python
import machine
import time
from network import LoRa
import socket
import ubinascii
sleep_time = 1000
print("init LoRa")
lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.EU868)
for i in range(0,10):
time.sleep(0.1) #be able to ctrl+c out of this
# create an ABP authentication params
dev_addr = struct.unpack(">l", ubinascii.unhexlify(''))[0]
nwk_swkey = ubinascii.unhexlify('')
app_swkey = ubinascii.unhexlify('')
lora.nvram_restore()
if(lora.has_joined() == False):
print("LoRa not joined yet")
lora.join(activation=LoRa.ABP, auth=(dev_addr, nwk_swkey, app_swkey))
else:
print("LoRa Joined")
s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
# set the LoRaWAN data rate
s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
# make the socket blocking
# (waits for the data to be sent and for the 2 receive windows to expire)
s.setblocking(True)
# send some data
print("[send_lora] sending {}".format([0,1,2]))
s.send(bytes([0, 1, 2]))
# make the socket non-blocking
# (because if there's no data received it will block forever...)
s.setblocking(False)
# get any data received (if any...)
data = s.recv(64)
lora.nvram_save()
print("received: {}".format(data))
print("sleeping for {} ms".format(sleep_time))
machine.deepsleep(sleep_time)
```