关于 WiPy 的一般信息¶
没有浮点支持¶
由于空间原因,没有浮点支持,也没有数学模块。这意味着不能在代码中的任何地方使用浮点数,并且必须使用“//”而不是“/”来执行所有除法。例子:
>>> r = 4 // 2 # this will work
>>> r = 4 / 2 # this WON'T
通电前¶
警告
WiPy 的 GPIO 引脚不能承受 5V 电压,将它们连接到高于 3.6V 的电压会对电路板造成无法修复的损坏。ADC 引脚在配置为模拟模式时不能承受 1.8V 以上的电压。在为电子设备接线时,请记住这些注意事项。
WLAN 默认行为¶
当 WiPy 以默认出厂配置启动时,以接入点模式ssid
启动,以:wipy-wlan
和开头。连接到此网络,WiPy 将在。为了访问交互式提示,请在默认端口 (23) 上打开到该 IP 地址的 telnet 会话。您将被要求提供凭据: 和 key: www.wipy.io
192.168.1.1
login: micro
password: python
远程登录¶
Linux stock telnet 工作起来很有吸引力(也在 OSX 上),但其他工具(如 putty)也能很好地工作。默认凭据是: 用户: micro
, 密码: python
.
。有关network.Server
如何更改默认值的信息,请参阅。例如,在 linux shell 上(当在 AP 模式下连接到 WiPy 时):
$ telnet 192.168.1.1
本地文件系统和 FTP 访问¶
WiPy 上有一个小的内部文件系统(驱动器),称为/flash
,存储在外部串行闪存中。如果连接并安装了微型 SD 卡,它也将可用。
当 WiPy 启动时,它总是从boot.py
位于
/flash
文件系统中的位置 启动。启动时,当前目录为/flash
.
文件系统可通过在 WiPy 中运行的本机 FTP 服务器访问。打开您选择的 FTP 客户端并连接到:
网址: ftp://192.168.1.1
, 用户: micro
, 密码: python
有关 network.Server
如何更改默认值的信息,请参阅。推荐的客户端是:Linux stock FTP(也在 OSX 中)、Filezilla 和 FireFTP。例如,在 linux shell 上:
$ ftp 192.168.1.1
WiPy 上的 FTP 服务器不支持主动模式,只支持被动模式,因此,如果使用原生 unix ftp 客户端,只需登录后即可:
ftp> passive
除此之外,FTP 服务器一次只支持一个数据连接。查看下面的 Filezilla 设置部分了解更多信息。
FileZilla 设置¶
不要使用快速连接按钮,而是打开站点管理器并创建新配置。在General
选项卡中确保加密设置为:。在传输设置选项卡中将最大连接数限制为一个,否则 FileZilla 将在检索和保存文件时尝试打开第二个命令连接,并且为了简单和减少代码大小,只能使用一个命令和一个数据连接。其他 FTP 客户端的行为方式可能类似。Only use
plain FTP (insecure)
无线升级固件¶
OTA 软件更新可以通过 FTP 服务器执行。将mcuimg.bin
文件上传到:/flash/sys/mcuimg.bin
大约需要 6 秒。你不会看到文件被存储在里面,/flash/sys/
因为它实际上是绕过用户文件系统保存的,所以它最终在内部隐藏文件系统中,但请放心,它已成功传输,并且已使用 MD5 校验和签名以验证其完整性。现在,通过按下板上的开关或键入以下内容来重置 WiPy:
>>> import machine
>>> machine.reset()
可以在以下位置找到软件更新:https://github.com/wipy/wipy/releases (Binaries.zip)。始终建议更新到最新软件,但请务必先阅读 发行说明 。
笔记
在bootloader.bin
里面发现Binaries.zip
有仅作参考,它并不需要的空中下载更新。
要检查您的软件版本,请执行以下操作:
>>> import os
>>> os.uname().release
如果版本号低于在发布中找到的最新 版本,请继续更新您的 WiPy!
启动模式和安全启动¶
如果您正常上电,或按下复位键,WiPy 将启动到标准模式;该 boot.py
文件将首先执行,然后
main.py
将运行。
您可以覆盖这个拉动启动顺序GP28
向上复位期间(其连接到3V3输出引脚)。此过程还允许及时返回到旧固件版本。WiPy 最多可以容纳 3 个不同的固件版本,它们是:出厂固件加上 2 个用户更新。
复位后,如果GP28
保持高电平,心跳 LED 将开始缓慢闪烁,如果 3 秒后引脚仍然保持高电平,LED 将开始闪烁更快,WiPy 将选择上一个用户更新来启动。如果之前的用户更新是所需的固件映像,则GP28
必须在 3 秒以上之前发布。如果 3 秒后引脚仍为高电平,则将选择出厂固件,LED 将快速闪烁 1.5 秒,WiPy 将继续启动。固件选择机制如下:
安全引导引脚 GP28
在以下期间释放:
第一个 3 秒窗口 |
第二个 3 秒窗口 |
最后的 1.5 秒窗口 |
---|---|---|
安全启动,最新
选择了固件
|
安全启动,以前
已选择用户更新
|
安全开机,出厂
选择了固件
|
在所有上述 3 种情况下,都进入了安全启动模式,这意味着跳过了boot.py
和的执行 main.py
。这对于从用户脚本引起的崩溃情况中恢复很有用。在安全启动期间所做的选择不是持久的,因此在下一次正常重置后,最新的固件将再次运行。
心跳指示灯¶
默认情况下,心跳 LED 每 4 秒闪烁一次,表示系统处于活动状态。这可以通过 wipy
模块覆盖:
>>> import wipy
>>> wipy.heartbeat(False)
目前您可能会看到 2 种错误:
如果心跳 LED 快速闪烁,则 Python 脚本(例如
main.py
)有错误。使用 REPL 进行调试。如果心跳灯一直亮,则是硬故障,无法恢复,唯一的办法就是按下复位开关。
有关睡眠模式的详细信息¶
machine.idle()
:功耗:~12mA(在 WLAN STA 模式下)。唤醒源:任何硬件中断(包括周期为 1ms 的 systick),无需特殊配置。machine.lightsleep()
:950uA(在 WLAN STA 模式下)。唤醒源是Pin
,RTC
并且WLAN
machine.deepsleep()
:~350uA。唤醒源是Pin
和RTC
。
machine.Pin 的其他详细信息¶
在 WiPy 板上,引脚由其字符串 ID 标识:
from machine import Pin
g = machine.Pin('GP9', mode=Pin.OUT, pull=None, drive=Pin.MED_POWER, alt=-1)
您还可以配置引脚以生成中断。例如:
from machine import Pin
def pincb(pin):
print(pin.id())
pin_int = Pin('GP10', mode=Pin.IN, pull=Pin.PULL_DOWN)
pin_int.irq(trigger=Pin.IRQ_RISING, handler=pincb)
# the callback can be triggered manually
pin_int.irq()()
# to disable the callback
pin_int.irq().disable()
现在每次在 gpio 引脚上看到下降沿时,都会执行回调。注意:机械按钮具有“弹跳”功能,按下或松开开关通常会产生多个边沿。请参阅:http://www.eng.utah.edu/~cs5780/debouncing.pdf 了解详细说明以及各种去抖动技术。
所有 pin 对象都通过 pin mapper 来产生一个 gpio pin。
对于 drive
参数,强度为:
Pin.LOW_POWER
- 2mA 驱动能力。
Pin.MED_POWER
- 4mA 驱动能力。
Pin.HIGH_POWER
- 6mA 驱动能力。
对于 alt
参数请参考引脚和复用功能表在<https://raw.githubusercontent.com/wipy/wipy/master/docs/PinOUT.png>`_为特定复用功能,每个销支撑件。
对于中断,priority
可以采用 1-7 范围内的值。并且该
wake
参数具有以下属性:
如果有
wake_from=machine.Sleep.ACTIVE
任何引脚可以唤醒电路板。如果
wake_from=machine.Sleep.SUSPENDED
引脚GP2
,GP4
,GP10
,GP11
, GP17`` 或GP24
可以唤醒电路板。请注意,此引脚中只能同时启用 1 个作为唤醒源,因此,只有最后启用的引脚作为machine.Sleep.SUSPENDED
唤醒源才有效。如果
wake_from=machine.Sleep.SUSPENDED
引脚GP2
,GP4
,GP10
,GP11
,GP17
和GP24
可以唤醒电路板。在这种情况下,可以同时启用所有 6 个引脚作为machine.Sleep.HIBERNATE
唤醒源。
其他 Pin 方法:
-
machine.Pin.
alt_list
()¶ 返回引脚支持的备用功能列表。列表项是以下形式的元组:
('ALT_FUN_NAME', ALT_FUN_INDEX)
machine.I2C 的其他详细信息¶
在 WiPy 上有一个硬件 I2C 外设,标识为“0”。默认情况下,这是构建 I2C 实例时使用的外设。默认引脚是 SCL 的 GP23 和 SDA 的 GP13,可以通过执行以下操作来创建默认的 I2C 外设:
i2c = machine.I2C()
引脚和频率可以指定为:
i2c = machine.I2C(freq=400000, scl='GP23', sda='GP13')
只有某些引脚可以用作 SCL/SDA。有关更多信息,请参阅引脚排列。
已知的问题¶
创建 SSL 套接字的方式不兼容¶
在包装 SSL 套接字之前,需要通过以下方式创建它们。
ssl.wrap_socket
:
import socket
import ssl
s = socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
ss = ssl.wrap_socket(s)
必须使用证书来验证连接的另一端,以及向另一端验证我们自己。此类证书必须使用 FTP 服务器存储为文件,并且必须将它们放置在具有特定名称的特定路径中。
验证对方的证书进入: ‘/flash/cert/ca.pem’
验证我们自己的证书进入: ‘/flash/cert/cert.pem’
我们自己证书的密钥在:‘/flash/cert/private.key’
笔记
当这些文件被存储时,它们被放置在内部隐藏文件系统中(就像固件更新一样),因此它们永远不可见。
例如,要使用证书连接到 Blynk 服务器,请获取ca.pem
位于blynk 示例文件夹中的文件。并将其放入'/flash/cert/'。然后做:
import socket
import ssl
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_SEC)
ss = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ca_certs='/flash/cert/ca.pem')
ss.connect(socket.getaddrinfo('cloud.blynk.cc', 8441)[0][-1])
uhashlib 模块中的不兼容性¶
由于 WiPy 的硬件实现细节,数据在消化之前必须进行缓冲,这将导致无法计算 RAM 中无法容纳的大数据块的哈希值。在这种情况下,由于很可能预先知道数据的总大小,因此可以将大小传递给构造函数,因此可以正确初始化 WiPy 的 HASH 硬件引擎,而无需缓冲。如果block_size
要给出,则还data
必须传递初始块。使用此扩展时,必须注意确保所有中间块(包括初始块)的长度是 4 字节的倍数。 最后一个块可以是任意长度。
例子:
hash = uhashlib.sha1('abcd1234', 1001) # length of the initial piece is multiple of 4 bytes
hash.update('1234') # also multiple of 4 bytes
...
hash.update('12345') # last chunk may be of any length
hash.digest()
通过网络模块控制telnet/FTP服务器的Adhoc方式¶
本 Server
类控制行为和FTP的配置和对WiPy运行Telnet服务。使用此类的方法执行的任何更改都会影响两者。
例子:
import network
server = network.Server()
server.deinit() # disable the server
# enable the server again with new settings
server.init(login=('user', 'password'), timeout=600)
-
class
network.
Server
(id, ...)¶ 创建一个服务器实例,
init
初始化参数见。
-
server.
init
(\*, login=('micro', 'python'), timeout=300)¶ 初始化(并有效地启动服务器)。可以选择传递一个新的
user
,password
和timeout
(以秒为单位)。
-
server.
deinit
()¶ 停止服务器
-
server.
timeout
([timeout_in_seconds])¶ 获取或设置服务器超时。
-
server.
isrunning
()¶ True
如果服务器正在运行,False
则返回,否则返回。