2018-12-5 14:31:49 [显示全部楼层]
9553浏览
查看: 9553|回复: 1

[ESP32系列教程] ESP32 / ESP8266 MicroPython教程:自动连接WiFi

[复制链接]
本MicroPython教程旨在阐释如何在MicroPython上自动连接WiFi网络,且无需在提示符中插入所有独立命令。本教程在ESP32ESP8266上均进行了测试。

简介

本MicroPython教程旨在阐释如何在MicroPython上自动连接WiFi网络,且无需在提示符中插入所有独立命令。此程序在ESP32和ESP8266上均进行了测试。打印结果出自ESP32上的测试。请注意,ESP8266上自动打印的消息与ESP32上的消息不同,因此其结果会与本教程所示的屏幕截图不同。但两者采用的方法完全相同。
我们将检验两种方法,一种是从模块导入函数并在需要连接WiFi网络时执行该函数,另一种是全自动式,即在启动后自动将开发板连接到WiFi网络。
请注意,这两种解决方案都需要将文件上传到MicroPython的文件系统。你可以参阅这篇此前的教程:ESP32/ESP8266 MicroPython教程:将文件上传到文件系统  以获取相关详细说明。此外,有关如何手动连接WiFi网络的说明,请查看此教程:ESP32 MicroPython教程:连接Wi-Fi网络。所有步骤都至关重要,因为我们基本上只是将它们封装在模块的函数中。

模块调用型连接

在第一部分中,我们将阐释如何在调用模块中定义的函数时自动连接WiFi网络。如果我们不想每次使用ESP32 / ESP8266时都连接WiFi网络,那么这个方法会非常有用。我们可以通过它决定何时连接WiFi。
要采用此方法,我们将定义一个简单的Python函数来执行连接程序。我们将此函数称为connect函数。
  1.   def connect():
  2.   #Python code goes here
复制代码

然后,导入网络模块,这是获取WiFi网络连接功能所必须的步骤。为方便起见,我们还要将我们的网络凭据(ssid和密码)存储在两个变量上。
  1. import network
  2.   
  3. ssid = "yourNetworkName"
  4. password = "yourNetworkPassword"
复制代码

接下来,获取站点WiFi接口的实例并将其存储在变量上。然后,检查我们是否已连接到WiFi网络。如已连接,则打印警告,完成执行。
  1.    station = network.WLAN(network.STA_IF)
  2.    if station.isconnected() == True:
  3.    print("Already connected")
  4.    return
复制代码
如未连接,则使用存储在前文所述的变量中的凭证来激活网络接口并执行实际连接。
  1.   station.active(True)
  2.   station.connect(ssid, password)
复制代码

由于连接可能需要一些时间,所以我们将通过检查is connected方法的输出结果来进行主动等待,直到成功连接为止。请注意,之所以需要pass语句(https://docs.python.org/2/tutorial/controlflow.html#pass-statements)是因为Python语法不起任何作用。

还要考虑到,我们为了简化操作将无限期地等待连接,举个例子,如果WiFi凭证出错,那么模块将无限期挂起,处于尝试连接的状态。当然,对于更稳健的实际应用场景,我们需要执行某种超时机制。

最后,我们将打印成功消息和WiFi配置
  1. while station.isconnected() == False:
  2. pass
  3. print("Connection successful")
  4. print(station.ifconfig())
复制代码

该模块的完整代码如下所示。将文件以.py为扩展名保存在你选择的目录中。你可以依你所好为其命名,但在本教程中,我们将其命名为ConnectWiFi.py。
  1. def connect():
  2.     import network
  3.     ssid = "yourNetworkName"
  4.     password =  "yourNetworkPassword"
  5.     station = network.WLAN(network.STA_IF)
  6.     if station.isconnected() == True:
  7.   print("Already connected")
  8.   return
  9.     station.active(True)
  10.     station.connect(ssid, password)
  11.     while station.isconnected() == False:
  12.         pass
  13.     print("Connection successful")
  14.     print(station.ifconfig())
复制代码


最后,要上传代码,只需打开命令行,导航到存储文件的目录,然后执行以下命令,将COM5改为你的设备所在的串行端口。
  1.   ampy --port COM5 put ConnectWiFi.py
复制代码
现在,用你选择的软件连接Python提示符。本教程所用软件为Putty。要验证新文件已正确上载,请执行以下命令:
  1.   import os
  2.   os.listdir()
复制代码
如图1所示,该文件应被列出。

TueJuly-202107207396..png
图1 - 成功上传WiFi连接模块。


现在,我们只需导入模块并调用connect函数,如下所示:
  1. import ConnectWiFi
  2. ConnectWiFi.connect()
复制代码


结果如图2所示。请注意,最后会显示我们的成功消息,表明我们现在已建立连接。

TueJuly-202107208127..png
图2 - connect函数调用的输出结果。


为了确认我们的安全保障运行良好,你可以尝试再次调用connect函数。它此时应该会在代码中返回一条消息,表明我们已建立连接。如图3所示。

TueJuly-202107203016..png
图3 – 已连接WiFi网络后调用函数时的警告消息。

自动连接

执行前,我们首先需要分析与某些启动脚本相关的MicroPython特性。
正如之前的一些教程所述,安装MicroPython时会在文件系统中生成一个boot.py文件。这个特定文件会在开发板供电时运行[1]。它已经包含一些低级代码,这些代码应予以保留。
如此处的MicroPython文档所示,我们可以在此文件放置我们用于连接WiFi网络的代码,这样电路板启动时会执行该代码。
不过,我们采用的是另一个方法。除了boot.py外,如果文件系统中有一个名为main.py的文件,那么该文件会在boot.py脚本[1]完成后运行。因此,我们将创建这个文件并在启动时通过它自动连接WiFi网络。请注意,此文件可以为我们的应用执行其他类型的代码。此外,由于它不是强制性文件,所以我们可以放心使用。
现在,为执行自动连接,我们将重新使用以前的模块。因此,先创建一个名为main.py的文件。如前所述,这次需要将其命名为main.py(与之前定义的模块的名称不同),否则它将不会自动执行。

此处,只需导入ConnectWiFi模块并调用connect函数,就像我们之前手动操作的那样。
  1. import ConnectWiFi
  2. ConnectWiFi.connect()
复制代码

现在,使用以下命令将文件加载到文件系统(记得将COM5改为你的设备端口)。如果你仍在通过Putty或其他软件连接,则需要先关闭该连接,否则无法加载文件。
  1. ampy --port COM5 put main.py
复制代码

现在重新连接Python提示符。你可以使用我们之前执行的os.listdir()调用确认文件已成功加载。
请注意,由于MicroPython已经在运行,因此不会出现任何改变。要检查我们的main.py是否按指示将开发板连接到WiFi网络,只需在打开提示符的情况下重置ESP32 / ESP8266。它此时应该会重新启动并执行我们的函数,如图4所示。

TueJuly-202107207969..png
图4 – 启动后自动连接。

我们可以通过导入ConnectWiFi模块并尝试调用connect函数来确认我们已建立连接。此处应该会返回“已连接”的警告,如图5所示。

TueJuly-202107203272..png
图5 - 尝试再次连接到WiFi网络时出现警告。

注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。你可以在此处查看原文章。

查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴

gada888  版主

发表于 2018-12-20 10:44:08

好教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2021 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail