简介

本文来分享一下墨星esp32的MicroPython的上手使用。包括安装驱动,安装软件,使用io引脚,使用电池,使用文件系统,SD卡,以及Wi-Fi。

墨星开发板esp32-wifi

宇宙无敌超级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 DMIPS240 MHz双核Tensilica LX6微控制器
  • 集成520 KB SRAM
  • 集成802.11b / g / n HT40 Wi-Fi收发器,基带,堆栈和LWIP
  • 集成双模蓝牙(经典和BLE
  • WROOM32模块中包含4 MB闪存
  • 板载PCB天线
  • 超低噪声模拟放大器
  • 霍尔传感器
  • 10个电容式触摸接口
  • 32 kHz晶体振荡器
  • 3UART(只有两个,一个用来下载程序,一个用来使用
  • 3SPI默认配置一个)
  • 2I2C默认配置一个)
  • 12ADC输入通道
  • 2 x I2S音频
  • 2DAC
  • 每个GPIO引脚都提供PWM /定时器输入/输出
  • 带有32 kB TRAX缓冲区的OpenOCD调试接口
  • SDIO/50 MHz
  • SD卡接口支持

现在我们使用micropython来玩一遍这个板子。

安装驱动

USB转串口模块

如果安装完成

  • windows:设备管理器会出现
  • MacOS:终端输入 ls /dev/tty.* 会出现/dev/tty.SLAB_USBtoUART这个设备。

安装软件

你可以使用任何喜欢的终端软件。

windows下推荐putty,MacOS下推荐picocom,波特率为115200。

超级推荐:PyCharm开发MicroPython

MicroPython教程2-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,电动机等。使用USBBAT引脚,并连接一个额外的稳压器

试一试:

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的资料非常多,我们也会分享非常多的资料和项目。