0

我在 TTN 的柜台上有问题。这个问题是machine.deepsleep在我的LoPy4. 我已经使用了 nvram_save() 和nvram_restore ()函数,但是 TTN 中的计数器仍然没有增加。这个屏幕捕获:

在此处输入图像描述

那么,在这种情况下有什么问题?

这是我的代码:

enter code here

import ads1x15 as extADC
import gc
import pycom
import socket
from network import LoRa
from uModBus.serial import Serial
from network import LoRa
import machine
import ubinascii
import utime
from machine import RTC, I2C
from machine import Pin


pycom.heartbeat(False)
rtc = RTC()
i2c = I2C(0, I2C.MASTER, pins=('P3', 'P4'), baudrate=100000)
adc = extADC.ADS1115(i2c, gain=1)
pinTrig = Pin('P23', mode=Pin.OUT)

# LoRa Socket Connection with two condition

if machine.reset_cause() == machine.DEEPSLEEP_RESET:
      pinTrig.value(1)  # enable High (12v)
      print("WOKE UP FROM DEEPSLEEP 3 MINUTES !")
      utime.sleep(1)
      lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.AS923)

      lora.nvram_restore() # Nvram restore function

      s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
      s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
      s.setblocking(False)
      s.bind(1)
else:
      pinTrig.value(1)
      utime.sleep(1)
      print("I'M PowerOn by Humans or Hard reset !")
      lora = LoRa(mode=LoRa.LORAWAN, region=LoRa.AS923)

      lora.nvram_restore() # Nvram restore function

      app_eui = ubinascii.unhexlify('********************')
      app_key = ubinascii.unhexlify('-----------------------------')
      lora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)
      while not lora.has_joined():
            utime.sleep(2.5)
            print('Not yet joined...')

      print('Joined')
      s = socket.socket(socket.AF_LORA, socket.SOCK_RAW)
      s.setsockopt(socket.SOL_LORA, socket.SO_DR, 5)
      s.setblocking(True)
      s.bind(1)


      ### Begin sensor reading and sending function ##################

      def read_data_Sensor () :


      ### End sensor reading and sending function ####################


      try:
          read_data_Sensor()

          lora.nvram_save() 

          utime.sleep(1)
          pinTrig.value(0)
          print("DeepSleep Mode")
          utime.sleep(1)

          machine.deepsleep(180000)
      except OSError:
          print("Terjadi Error - Restart")
          s.send(b"\xff\xff")
          utime.sleep(1)
          machine.reset()
4

1 回答 1

0

我对 nvmram_save/restore 方法的理解是它们恢复了 lora 堆栈的完整状态,包括“加入/未加入”状态。如果您每次都显式地执行 join(),那么这都会在连接交换中浪费能量/时间,并且此过程将始终将计数器重置为 0。

我认为您的代码应该在 nvram_restore() 之后测试 lora.has_joined(),并且只有在返回 False 时才执行连接过程。

顺便说一句,我也遇到了使用 TTN v3 的 pycom 和 nvmram_save/restore 问题。

于 2022-01-07T09:18:21.993 回答