简介
本文来分享一下墨星esp32的MicroPython的上手使用。包括安装驱动,安装软件,使用io引脚,使用电池,使用文件系统,SD卡,以及Wi-Fi。
宇宙无敌超级ESP32开发板,终于来了!墨星ESP32基于乐鑫公司的WROOM32模组,我们添加了你需要的所有功能:内置USB转串口,自动下载电路,锂电池充电器以及GPIO,可以适用于墨星系列的扩展板。而且我们加入了一个SD卡槽,可以使用SD卡来扩展存储空间。
墨星ESP32模块包含双核ESP32芯片,4 MB SPI Flash,天线以及所有配套的器件。ESP32具有WiFi 和 BLE支持。这意味着它几乎适用于任何无线或互联网连接的项目。
墨星ESP32是墨星系列的主控板,所以你可以使用墨星系列的多款配件。
ESP32是一款非常受欢迎的ESP8266的完美升级产品。相比之下,ESP32具有更多的GPIO,大量的模拟输入,两个模拟输出,多个额外的外设(如备用UART),两个内核,更高速的处理器,等等等等!我们认为,随着ESP32的推出,我们会看到更多人转向这款芯片,因为它功能全面。
警告:由于ESP32很新,很多开发环境都不完善,请确保自己有足够的能力来折腾,我们会不断完善开发环境,降低使用门槛。
以下是Espressif关于ESP32的规格:
- 带有600 DMIPS的240 MHz双核Tensilica LX6微控制器
- 集成520 KB SRAM
- 集成802.11b / g / n HT40 Wi-Fi收发器,基带,堆栈和LWIP
- 集成双模蓝牙(经典和BLE)
- WROOM32模块中包含4 MB闪存
- 板载PCB天线
- 超低噪声模拟放大器
- 霍尔传感器
- 10个电容式触摸接口
- 32 kHz晶体振荡器
- 3个UART(只有两个,一个用来下载程序,一个用来使用)
- 3个SPI(默认配置一个)
- 2个I2C(默认配置一个)
- 12个ADC输入通道
- 2 x I2S音频
- 2个DAC
- 每个GPIO引脚都提供PWM /定时器输入/输出
- 带有32 kB TRAX缓冲区的OpenOCD调试接口
- SDIO主/从50 MHz
- SD卡接口支持
现在我们使用micropython来玩一遍这个板子。
安装驱动
如果安装完成
- windows:设备管理器会出现
- MacOS:终端输入 ls /dev/tty.* 会出现/dev/tty.SLAB_USBtoUART这个设备。
安装软件
你可以使用任何喜欢的终端软件。
windows下推荐putty,MacOS下推荐picocom,波特率为115200。
超级推荐:PyCharm开发MicroPython
picocom命令:sudo picocom /dev/tty.SLAB_USBtoUART -b 115200
即可进入MicroPython的REPL。
引脚
ESP32的一大优点是它比ESP8266拥有更多的GPIO。但是有几件事值得注意,所以请仔细阅读引脚说明
微控制器的通用I / O引脚。所有的逻辑是3.3V
ESP32有很多的GPIO可以连接LED,按键,开关,传感器,下面是我们推荐的引脚使用方法。
墨星esp32的板子设计过,所有的引脚(除了已经占用的引脚),可以接任意电平,都不会影响启动。(GPIO12引脚已经设置为不影响flash_voltage,详情见https://github.com/espressif/esptool/wiki/espefuse)
标有IO的引脚(比如IO12),都是可以输入(I),又可以输入(O),只标有I的引脚(比如I34),只能输入,不能输出。
8个GPIO:
- IO12
- IO13
- IO14
- IO27
- IO33
- IO32
- IO4
- IO5
I2C
- IO22 SCL
- IO21 SDA
UART2
- IO16 RX
- IO17 TX
VSPI
- IO18 SCK
- IO23 MOSI
- IO19 MISO
模拟引脚
- IO25 DAC1 ADC
- IO26 DAC2 ADC
- I34 ADC
- I36 ADC
已经占用的引脚
- IO15 SD卡的SPI的CS引脚
- IO29 SD卡的检测引脚
- I35 ADC 用于检测锂电池电压
- IO1 TX和IO3 RX 连接到USB转串口芯片,用于REPL与烧写固件。
电源引脚:
- GND – 地
- BAT – 这是用于锂电池的JST插孔的正极
- USB – micro USB插孔的正极
- 3V – 这是3.3V稳压器的输出。该稳压器可以提供500mA的峰值,但其中一半是由ESP32提供的,ESP32是一个相当耗电的芯片。所以如果你需要大量的功耗用于LED,电动机等。使用USB或BAT引脚,并连接一个额外的稳压器
试一试:
from machine import Pin
p4 = Pin(4, Pin.OUT)#创建一个p4引脚,输出模式,标号是4
p4.value(1)#引脚置高
p4.value(0)#引脚置低
p5 = Pin(5,Pin.IN)#创建一个p5引脚,输入模式,标号是5
print(p5.value())#获取p5引脚的电平
ESP32有非常多的硬件功能,比如I2C,SPI,ADC,PWM,UART,可以在这里找到代码:https://docs.singtown.com/micropython/zh/latest/esp32/esp32/quickref.html
供电管理
我们希望墨星开发板的供电非常方便,所以我们内置了锂电池充电芯片,当你插入USB和锂电池的时候,USB会最高400ma的电流给锂电池自动供电。
JST座子旁有一个LED,当充电的时候亮,当充电结束时也会亮。如果没有插入锂电池,当瞬时电流变大的时候,也会亮,比如连接Wi-Fi,打开热点,这是正常的。
如果你使用的是电池,那么你很可能想知道电压是多少!这样你就可以知道电池何时需要充电。锂电池在4.2V时“最大输出”,电池的大部分时间内保持在3.7V左右,然后在保护电路切断之前缓慢下降到3.2V左右。通过测量电压,您可以快速判断您何时低于3.7V
由于ESP32具有大量的ADC引脚,因此我们’牺牲’了一个引脚用于锂电池监控。您可以读取GPIO35的1/4.3电池电压 。
一个很实用的脚本,ESP32的ADC误差很大:
from machine import Pin, ADC
bat = ADC(Pin(35))
print(bat.read()*0.00113,'V')
文件系统
micropython内置了文件系统的功能非常好用。
读取当前文件列表:
>>>import os
>>>os.listdir()
['boot.py', 'a.txt']
写文件:
with open('a.txt','wt') as f:
f.write('hello world')
读文件:
with open('a.txt','rt') as f:
print(f.read())
SD卡
墨星esp32使用I39引脚作为SD卡检测的引脚。
sd_pin = Pin(39,Pin.IN)
sd_pin.value()#当插入SD卡,就是0,当没有插入SD卡,就是1
墨星esp32使用的是vspi通道连接SD卡,
首先先把下载 https://github.com/micropython/micropython/blob/master/drivers/sdcard/sdcard.py
把sdcard.py下载到板子里。
import machine, sdcard, os
from machine import SPI, Pin
sd = sdcard.SDCard(SPI(2, sck=Pin(18), mosi=Pin(23), miso=Pin(19)), Pin(15))
os.mount(sd, '/sd')
os.listdir('/sd')
脱机运行
参考资料:https://docs.singtown.com/micropython/zh/latest/esp32/esp32/general.html#id2
当上电后,会先执行boot.py,因为boot.py的内容会执行main.py,所以,我们只需要更改main.py就可以让程序脱机运行了。
但是怎么能让sd卡的程序自动运行?修改boot.py,先挂载sd卡,然后执行sd卡内的内容。
#boot.py
import machine, sdcard, os
from machine import SPI, Pin
try:
sd = sdcard.SDCard(SPI(2, sck=Pin(18), mosi=Pin(23), miso=Pin(19)), Pin(15))
os.mount(sd, '/sd')
execfile('/sd/boot.py')
except:
sd = None
if(sd):
execfile('/sd/main.py')
Wi-Fi
esp32最重要的功能就是Wi-Fi,MicroPython提供了Wi-Fi非常好的支持。
station功能
网络模块用于配置WiFi连接。有两处WiFi接口,一个用于 station (当ESP32连接到路由器时),一个用于热点(access point)(用于其他设备与ESP32连接)。 使用以下指令创建这些对象的例子:
import network
sta_if = network.WLAN(network.STA_IF)#新建一个station的对象
sta_if.active()#检查是否开启
sta_if.active(True)#激活station接口
sta_if.scan()#扫描附近的Wi-Fi
sta_if.connect('Wi-Fi的名字', 'Wi-Fi的密码')#连接到路由器,其中需要换成真实的Wi-Fi名字和密码
sta_if.isconnected()#检查是否连接上
sta_if.ifconfig()#检查IP地址 会返回类似('192.168.0.2', '255.255.255.0', '192.168.0.1', '8.8.8.8')
ap_if.active(False)#禁用网络
下面的脚本可以放到boot.py中,开机自动连接到Wi-Fi,别忘了修改代码中的Wi-Fi名字和密码。
def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect('<essid>', '<password>')
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
do_connect()
AP功能
ESP32有AP热点功能,可以让其他的设备连接到ESP32上。
import network
ap_if = network.WLAN(network.AP_IF)
ap_if.active()#检查是否开启
ap_if.active(True)#开启网络
ap_if.config(essid='1233332321')#设置AP热点你的名字
ap_if.ifconfig()#检查IP地址 会返回类似('192.168.4.1', '255.255.255.0', '192.168.4.1', '8.8.8.8')
ap_if.active(False)#禁用网络
更多资料
micropython的资料非常多,我们也会分享非常多的资料和项目。
- 官网:https://micropython.org/
- esp32的micropython文档:https://docs.singtown.com/micropython/zh/latest/esp32/esp32/quickref.html