首页 > 解决方案 > 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' 没有被打印。不知道为什么,感谢任何帮助!

标签: micropythonwifi

解决方案


推荐阅读