如何使用 PyCom FiPy 连接到 LTE 蜂窝网络?
How connect to LTE cell network with PyCom FiPy?
我正在尝试让 PyCom FiPy 板与 LTE 网络连接一起工作。我有一张全息 SIM 卡。我正在使用两段代码。一个来自 PyCom docs the other is from code I found on the PyCom forum for debugging LTE.
来自 PyCom LTE 文档的第一个代码片段
import time
from network import LTE
print('main-testy.py starting. This is the code snippet from pycom docs')
#lte = LTE(carrier="verizon")
lte = LTE()
print("trying to attach")
lte.attach(band=13)
while not lte.isattached():
time.sleep(0.5)
print('Attaching...')
print("trying to connect")
lte.connect(cid=3)
while not lte.isconnected():
time.sleep(0.5)
print('Connecting...')
# Now use sockets as usual...
输出
前几次我 运行 此代码会附加,然后在 lte.connect
调用时生成 python 错误。原始样本使用 'verizon' 的载体,但论坛 post 表示没有必要。
>>> Running main-testy.py
>>>
>>>
main-testy.py starting. This is the code snippet from pycom docs
trying to attach
Attaching...
Attaching...
Attaching...
.. never attaches
来自 PyCom LTE 论坛帖子的第二个代码片段
翻阅论坛,我发现其他一些用户也有类似的问题。我将他们的尝试与文档中的一些可用命令相结合来编写此代码。它提供了有关 SIM 卡和调制解调器的一些基本信息。这是代码。
# Determine carrier notes
from network import LTE
# 1817
lte = LTE()
def send_at_cmd_pretty(cmd):
response = lte.send_at_cmd(cmd).split('\r\n')
for line in response:
print(line)
print("get phy status")
send_at_cmd_pretty('AT!="showphy"') # get the PHY status
print("get System FSM")
send_at_cmd_pretty('AT!="fsm"') # get the System FSM
print("get System COPS. PLMN Selection: +COPS")
print("!!!!!!!!!1 always generates error !!!!!!!!!!!!")
send_at_cmd_pretty('AT+COPS=?') # get the System FSM
print("get conformance test modes. List of carriers? ")
send_at_cmd_pretty("AT+SQNCTM=?") # get list of carriers for
# results are
# "3gpp-conformance", "att", "docomo", "kt", "lgu", "softbank", "standard", "telstra", "verizon")
results = lte.imei()
print("lte.imei results \n{}" . format(results))
results = lte.iccid()
print("lte.iccid results \n{}" . format(results))
输出
所有这些代码都可以运行,但其中一个命令 (+COPS) 出错。我确实检查了 AT 命令参考,语法是 +COPYS=?看起来是正确的。也许该特定命令只能在附加后发出。
>> Running lte-basic-operations.py
>>>
>>>
get phy status
DL SYNCHRO STATISTICS
=====================
Synchro state : OFF
PPU SIB1 ACQ watchdog : 0
Frequency Hypothesis RF (Hz) : 0
RSRP (dBm) : 0.00
RSRQ (dB) : 0.00
Channel estimation state (Cell-spec.) : LOW CINR
Channel estimation state (UE-spec.) : LOW CINR
Channel estimation state (MBSFN) : LOW CINR
Channel estimation CINR : 0.00
Channel length : SHORT
AGC
AGC RX gain (dB) : 0.00
RX PSD BO (dBFs) : 0.00
RX PSD (dBm) : 0.00
Noise level RS (dBm) : 0.00
Digital gain (dB) : 0.00
CINR RS (dB) : 0.00
NARROWBANDS
Last DL NB : 0
Last UL NB : 0
AFC
Frequency offset RF (Hz) : 0
Frequency offset BB (Hz) : 0
PBCH
MIB received quantity : 0
MIB timeout quantity : 0
OK
get System FSM
SYSTEM FSM
==========
+--------------------------+--------------------+
| FSM | STATE |
+--------------------------+--------------------+
| RRC TOP FSM |STOPPED |
| RRC SEARCH FSM |NULL |
| RRC ACTIVE FSM |NULL |
| PMM PLMN FSM |NULL |
| EMM MAIN FSM |NULL |
| EMM AUTH FSM |NULL |
| EMM CONN FSM |NULL |
| EMM TAU FSM |NULL |
| EMM TEST FSM |NULL |
| ESM BEARER FSM |BEARER_NULL |
| SMS MT FSM |IDLE |
| SMS MO FSM |IDLE |
| HP MAIN FSM |IDLE |
| HP USIM FSM |NULL |
| HP SMS MO FSM |IDLE |
| HP SMS MT FSM |IDLE |
| HP CAT FSM |NULL |
+--------------------------+--------------------+
OK
get System COPS. PLMN Selection: +COPS
!!!!!!!!!1 always generates error !!!!!!!!!!!!
ERROR
get conformance test modes. List of carriers?
+SQNCTM: ("3gpp-conformance", "att", "docomo", "kt", "lgu", "softbank", "standard", "telstra", "verizon")
OK
lte.imei results
354346095554902
lte.iccid results
8944500208186565235
>
使用全息 SIM 卡时,您不应使用 Verizon 配置文件,因为这仅适用于 Verizon SIM 卡。同样对于全息图,CID 应为 1,3 仅适用于 Verizon SIM 卡。
尽管 ICCID 命令 returns 结果,SIM 卡似乎有问题,因为 HP USIM FSM 报告 NULL。
你能不能先试试 lte.factory_reset() 然后再用 cid=1 试试?
如果问题仍然存在,请联系 Pycom 支持 https://pycom.io/community/contact-support/
我确实设法让 LTE 使用全息卡。但是,它不是 100% 可靠的。有时它会停止或挂断。任何意见表示赞赏。
import time
from network import LTE
import utime
import machine
import _thread
print('main-testy.py starting. This is the code snippet from pycom docs')
def send_at_cmd_pretty(cmd):
response = lte.send_at_cmd(cmd).split('\r\n')
for line in response:
print(line)
def do_ntp(a_server):
# Syncing time
RTCI = machine.RTC()
print('Syncing time with %s' % a_server, end='')
RTCI.ntp_sync(a_server)
while not RTCI.synced():
print('.', end='')
utime.sleep(1)
print('')
def get_time_as_string():
year, month, mday, hour, minute, second, weekday, yearday = utime.localtime()
# form an iso time string
# eg. 1985-12-04T23:20:50
a_string = '{}-{:02d}-{:02d}T{:02d}:{:02d}:{:02d}' . format(year, month, mday, hour, minute, second)
return a_string
###############################################
lte = LTE()
lte.reset()
lte.init()
print("trying to attach")
#lte.attach(band=13)
lte.attach()
while not lte.isattached():
time.sleep(0.5)
#print('Attaching...')
print('Attaching...', end='')
send_at_cmd_pretty('AT+CEREG?') # get the System FSM
time.sleep(5)
print("trying to connect")
#lte.connect(cid=3)
lte.connect()
while not lte.isconnected():
time.sleep(0.5)
print('Connecting...')
time.sleep(5)
# Now use sockets as usual...
print('**** connected ***********************')
do_ntp('time.google.com')
#do_ntp('pool.ntp.org')
time.sleep(5)
print(get_time_as_string())
我正在尝试让 PyCom FiPy 板与 LTE 网络连接一起工作。我有一张全息 SIM 卡。我正在使用两段代码。一个来自 PyCom docs the other is from code I found on the PyCom forum for debugging LTE.
来自 PyCom LTE 文档的第一个代码片段
import time
from network import LTE
print('main-testy.py starting. This is the code snippet from pycom docs')
#lte = LTE(carrier="verizon")
lte = LTE()
print("trying to attach")
lte.attach(band=13)
while not lte.isattached():
time.sleep(0.5)
print('Attaching...')
print("trying to connect")
lte.connect(cid=3)
while not lte.isconnected():
time.sleep(0.5)
print('Connecting...')
# Now use sockets as usual...
输出
前几次我 运行 此代码会附加,然后在 lte.connect
调用时生成 python 错误。原始样本使用 'verizon' 的载体,但论坛 post 表示没有必要。
>>> Running main-testy.py
>>>
>>>
main-testy.py starting. This is the code snippet from pycom docs
trying to attach
Attaching...
Attaching...
Attaching...
.. never attaches
来自 PyCom LTE 论坛帖子的第二个代码片段
翻阅论坛,我发现其他一些用户也有类似的问题。我将他们的尝试与文档中的一些可用命令相结合来编写此代码。它提供了有关 SIM 卡和调制解调器的一些基本信息。这是代码。
# Determine carrier notes
from network import LTE
# 1817
lte = LTE()
def send_at_cmd_pretty(cmd):
response = lte.send_at_cmd(cmd).split('\r\n')
for line in response:
print(line)
print("get phy status")
send_at_cmd_pretty('AT!="showphy"') # get the PHY status
print("get System FSM")
send_at_cmd_pretty('AT!="fsm"') # get the System FSM
print("get System COPS. PLMN Selection: +COPS")
print("!!!!!!!!!1 always generates error !!!!!!!!!!!!")
send_at_cmd_pretty('AT+COPS=?') # get the System FSM
print("get conformance test modes. List of carriers? ")
send_at_cmd_pretty("AT+SQNCTM=?") # get list of carriers for
# results are
# "3gpp-conformance", "att", "docomo", "kt", "lgu", "softbank", "standard", "telstra", "verizon")
results = lte.imei()
print("lte.imei results \n{}" . format(results))
results = lte.iccid()
print("lte.iccid results \n{}" . format(results))
输出
所有这些代码都可以运行,但其中一个命令 (+COPS) 出错。我确实检查了 AT 命令参考,语法是 +COPYS=?看起来是正确的。也许该特定命令只能在附加后发出。
>> Running lte-basic-operations.py
>>>
>>>
get phy status
DL SYNCHRO STATISTICS
=====================
Synchro state : OFF
PPU SIB1 ACQ watchdog : 0
Frequency Hypothesis RF (Hz) : 0
RSRP (dBm) : 0.00
RSRQ (dB) : 0.00
Channel estimation state (Cell-spec.) : LOW CINR
Channel estimation state (UE-spec.) : LOW CINR
Channel estimation state (MBSFN) : LOW CINR
Channel estimation CINR : 0.00
Channel length : SHORT
AGC
AGC RX gain (dB) : 0.00
RX PSD BO (dBFs) : 0.00
RX PSD (dBm) : 0.00
Noise level RS (dBm) : 0.00
Digital gain (dB) : 0.00
CINR RS (dB) : 0.00
NARROWBANDS
Last DL NB : 0
Last UL NB : 0
AFC
Frequency offset RF (Hz) : 0
Frequency offset BB (Hz) : 0
PBCH
MIB received quantity : 0
MIB timeout quantity : 0
OK
get System FSM
SYSTEM FSM
==========
+--------------------------+--------------------+
| FSM | STATE |
+--------------------------+--------------------+
| RRC TOP FSM |STOPPED |
| RRC SEARCH FSM |NULL |
| RRC ACTIVE FSM |NULL |
| PMM PLMN FSM |NULL |
| EMM MAIN FSM |NULL |
| EMM AUTH FSM |NULL |
| EMM CONN FSM |NULL |
| EMM TAU FSM |NULL |
| EMM TEST FSM |NULL |
| ESM BEARER FSM |BEARER_NULL |
| SMS MT FSM |IDLE |
| SMS MO FSM |IDLE |
| HP MAIN FSM |IDLE |
| HP USIM FSM |NULL |
| HP SMS MO FSM |IDLE |
| HP SMS MT FSM |IDLE |
| HP CAT FSM |NULL |
+--------------------------+--------------------+
OK
get System COPS. PLMN Selection: +COPS
!!!!!!!!!1 always generates error !!!!!!!!!!!!
ERROR
get conformance test modes. List of carriers?
+SQNCTM: ("3gpp-conformance", "att", "docomo", "kt", "lgu", "softbank", "standard", "telstra", "verizon")
OK
lte.imei results
354346095554902
lte.iccid results
8944500208186565235
>
使用全息 SIM 卡时,您不应使用 Verizon 配置文件,因为这仅适用于 Verizon SIM 卡。同样对于全息图,CID 应为 1,3 仅适用于 Verizon SIM 卡。
尽管 ICCID 命令 returns 结果,SIM 卡似乎有问题,因为 HP USIM FSM 报告 NULL。
你能不能先试试 lte.factory_reset() 然后再用 cid=1 试试?
如果问题仍然存在,请联系 Pycom 支持 https://pycom.io/community/contact-support/
我确实设法让 LTE 使用全息卡。但是,它不是 100% 可靠的。有时它会停止或挂断。任何意见表示赞赏。
import time
from network import LTE
import utime
import machine
import _thread
print('main-testy.py starting. This is the code snippet from pycom docs')
def send_at_cmd_pretty(cmd):
response = lte.send_at_cmd(cmd).split('\r\n')
for line in response:
print(line)
def do_ntp(a_server):
# Syncing time
RTCI = machine.RTC()
print('Syncing time with %s' % a_server, end='')
RTCI.ntp_sync(a_server)
while not RTCI.synced():
print('.', end='')
utime.sleep(1)
print('')
def get_time_as_string():
year, month, mday, hour, minute, second, weekday, yearday = utime.localtime()
# form an iso time string
# eg. 1985-12-04T23:20:50
a_string = '{}-{:02d}-{:02d}T{:02d}:{:02d}:{:02d}' . format(year, month, mday, hour, minute, second)
return a_string
###############################################
lte = LTE()
lte.reset()
lte.init()
print("trying to attach")
#lte.attach(band=13)
lte.attach()
while not lte.isattached():
time.sleep(0.5)
#print('Attaching...')
print('Attaching...', end='')
send_at_cmd_pretty('AT+CEREG?') # get the System FSM
time.sleep(5)
print("trying to connect")
#lte.connect(cid=3)
lte.connect()
while not lte.isconnected():
time.sleep(0.5)
print('Connecting...')
time.sleep(5)
# Now use sockets as usual...
print('**** connected ***********************')
do_ntp('time.google.com')
#do_ntp('pool.ntp.org')
time.sleep(5)
print(get_time_as_string())