micropython - WLAN 问题:进入函数体后 WLAN 自动连接
问题描述
我有一个 Pycom Lopy 4,它将接收来自另一个 MCU 的传感器读数,并在将接收到的数据发送到 MQTT 服务器之前对其进行结构化。为此,我将 LoPy4 的 WLAN 模式初始化为“STA_AP”。
然而,我意识到,当我尝试 wlan.disconnect(),并且我的代码进入一个函数块来处理数据时,wlan.isconnected() 再次返回 True!我知道这一点是因为我在函数体中放置了一些打印语句来检查连接性。下面是我的代码:
import usocket
from network import WLAN
import ustruct
from mqtt import MQTTClient
import machine
sensor_dict = {
0x77 : "bme280"
# Add more sensors here #
}
wlan = WLAN()
## Set static IP address for server
wlan.ifconfig(id = 1, config=('192.168.0.104', '255.255.255.0', '192.168.0.1', '192.168.0.1'))
## Set WLAN mode to STA_AP (station & access point)
print("Setting up wlan access point...")
wlan.init(mode = WLAN.STA_AP, ssid = 'server_layer1', auth = (WLAN.WPA2, 'Password123'), channel=7, antenna=WLAN.INT_ANT)
print("wlan mode set up: with WPA2 auth\n")
## -----------------------------This is the function block---------------------------------- ##
def send_data(data_raw):
print("Unpacking raw data...")
data = ustruct.unpack('lifff', data_raw)
loc, sensor_type, temp, press, hum = data
if wlan.isconnected():
print("connected1")
## Connect to internet
wlan.connect("Name", auth=(WLAN.WPA2, "hahahahaha"), timeout=5000)
if wlan.isconnected():
print("connected3")
while not wlan.isconnected():
machine.idle()
print("Connected to WiFi\n")
print("Sending data up to MQTT server...")
client = MQTTClient("xxx123", "io.adafruit.com",user="yoplo", password="xxx123", port=1883)
client.connect()
client.publish(topic="yoplo/feeds/{}/{}/temp".format(loc, sensor_dict[sensor_type]), msg=temp, retain = True)
## ---------------------------------End of function block------------------------------------- ##
UDP_IP = "0.0.0.0"
UDP_PORT = 6006
## Set up UDP socket and bind
sock = usocket.socket(usocket.AF_INET,usocket.SOCK_DGRAM) ## UDP
sock.bind((UDP_IP, UDP_PORT))
print('Socket binded.')
data_raw, addr = sock.recvfrom(24) ## buffer size is 24 bytes
## -----------------------------------ran wlan.disconnect() here--------------------------------##
wlan.disconnect()
if wlan.isconnected():
print("connected2")
send_data(data_raw)
machine.deepsleep(10)
我的输出是:
Setting up wlan access point...
wlan mode set up: with WPA2 auth
Socket binded.
raw data payload: b'q\x01\x00\x00w\x00\x00\x00\xe1z\xd0Aq\xedzD\x14\xae^B'
source: ('192.168.0.105', 49258)
connected2
Unpacking raw data...
connected1
connected3
Connected to WiFi
Sending data up to MQTT server...
Traceback (most recent call last):
File "main.py", line 65, in <module>
File "main.py", line 43, in send_data
File "/flash/lib/mqtt.py", line 66, in connect
OSError: [Errno 113] EHOSTUNREACH
Pycom MicroPython 1.18.2.r6 [v1.8.6-849-a210e85] on 2019-05-13; LoPy4 with ESP32
Type "help()" for more information.
'connected1' 和 'connected3' 被打印,虽然 'connected2' 没有被打印。不知道为什么,感谢任何帮助!
解决方案
推荐阅读
- java - Java Visual VM 指示 Object[] 中有大量内存,但我不知道这些可以在哪里制作
- codeigniter - 使用 codeigniter 中插入的数据自动从表单插入视图重定向到表单结果视图
- react-native - DrawerNavigator inside TabNavigator inside SwitchNavigator 反应原生
- django - Django电话登录错误
- python - 如何可以调用一次随机函数并在另一个函数中固定?
- javascript - Redux Saga 的比赛不会触发
- angularjs - 使用 $setPristine() 时的意外行为
- http - 这个 curl 命令行中的“OPEN”是什么意思?
- vb.net - 从路径获取文件夹并打开该文件夹中的文件
- ruby-on-rails - ruby 在视图中创建一个带有按钮的公寓租户