发新帖

[试用评测] 【ESP32 WIFI+蓝牙开发板试用体验】MicroPython获取天气预报小试

[复制链接]

初级技术员

Rank: 3Rank: 3

发表于 2018-8-11 17:17:11
| 3271 查看 | 1 回复
本帖最后由 Toffy 于 2018-8-12 18:02 编辑

第一次成功申请到试用,非常开心!正好我近期比较关注ESP32这块网红小板。先感谢下社区提供的这次机会!

据说2016年最火的WiFi模块/开发板是ESP8266,2017年最火的WiFi模块/开发板就非ESP32莫属了,而且有那么一段时期ESP32是有钱也很难买到的,可以见这款产品的火爆程度!更可贵的是,ESP32同时拥有WiFi和蓝牙双模、完善的IO功能、低功耗、相对丰富的第三方固件支持和不错的性能。我手上的板子采用的是ESP32-WROOM-32模组,以下是此模组的产品规格(信息来自乐鑫官网):

1.png
2.png


1. 开箱评测

以下是本次评测的ESP32开发板的靓照:




板子自带30个针脚、1个Micro-USB接口(由内置CP2102 USB-TTL模块转接)、两个物理按键(EN和BOOT)、两个LED(其中一个是电源指示灯)。板子背后自带已焊接好的针脚,方便直接插入杜邦线母头。乐鑫官网是说针脚可以直接插入面包板的,可是不知道为什么我手上的这款成品的两边针脚呈现出外八字的倾斜角度,总是不能同时把两边针脚完全插入,如下图(注意左右针脚):



那就只能用杜邦线母头来接线了。

2.刷MicroPython固件

Python语言是近几年比较火的一门开发语言。其简洁的语言风格和丰富的拓展库等特性可以帮助多个领域的开发者快速实现想法。MicroPython是专门为MCU/SoC开发的Python语言开发环境。相对于CPython(最常见的Python解释器),MicroPython给Python 3做了大量的精简和优化,且增加了特有的库来实现对开发板的软硬件调用,以更好的适配单片机的运行环境。又不同于C/C++语言,MicroPython有着更快速的开发的优点,但同时也有可兼容的芯片不多的缺点。

由于我比较擅长使用Python语言,又听说MicroPython支持ESP32,果断在拿到板子的第一时间尝试刷MicroPython的固件。刷入方法如下:

2.1. USB接入电脑

使用USB数据线接入电脑。如果是windows电脑,请确保系统可以正确识别此设备,且已安装CP210x的驱动。正确识别后的设备会是正常显示在设备管理器中,并会有个端口号(COM开头的),如下:

6.png

2.2. 下载固件

上MicroPython的官网,找到ESP32的固件下载地址并下载。
我这里下载到的固件是esp32-20180811-v1.9.4-447-g86e0b2553.bin

2.3. 安装esptool

如果使用的是windows环境,请先确保已安装了python。安装esptool的命令如下:
  1. pip install esptool
复制代码

安装好后,可以验证是否安装成功:
  1. esptool version
复制代码

如果能正确显示版本号,则说明安装成功。

2.4. 固件

在刷入之前,需要先进行擦除flash操作:

  1. esptool --port COM4 erase_flash
复制代码

7.png

接着,刷入固件:

  1. esptool --chip esp32 --port COM4 write_flash -z 0x1000 esp32-20180811-v1.9.4-447-g86e0b2553.bin
复制代码
过程大概需要2分钟的时间。刷成功后会是这样:
8.png


3. 玩转MicroPython,获取天气预报数据

3.1. 进shell

在刷成功MicroPython后,可以拿PuTTY来直接用串口连接ESP32进入shell,具体步骤为:
  • 选择Serial模式
  • 填入正确的端口号(如COM4)
  • 比特率填写115200
  • 点击连接

如没有问题,将直接进入熟悉的Python Shell环境:

9.png

3.2. MicroPython内置模块介绍

查看一下都有哪些内置模块吧:

  1. help('modules')
复制代码

10.png

可以看得出,MicroPython已经内置了很多原来Python内置的基本模块,部分模块在名字前面加了u就是micropython已优化过的模块,可能功能会有些删减但最最基础的还是有的。这些模块的使用方法和CPython基本无异(很少部分会有差异,官网有说明),所以还是那熟悉的味道。

同时,还有内置esp/esp32模块是操作板子的已封装好的指令集合,machine模块是专门操作IO的功能集合,可以试下以下代码:
  1. import esp
  2. import esp32
  3. import machine
  4. dir(esp)
  5. dir(esp32)
  6. dir(machine)
复制代码

结果如下:

11.png

3.3. 点亮一个灯实验

代码如下:

  1. from machine import Pin
  2. led2=Pin(2,Pin.OUT)
  3. led2.value(1) #点亮
  4. led2.value(0) #熄灭
  5. import time
  6. while True:  #循环点亮熄灭
  7.     led2.value(1)
  8.     time.sleep(1)
  9.     led2.value(0)
  10.     time.sleep(1)
复制代码

13.png

可以看到板子上蓝色的LED可以被点亮和熄灭:

14.jpg

3.4. 开始上网,获取天气预报数据

先激活wlan
  1. import network
  2. wlan=network.WLAN()
  3. wlan.active(1)
复制代码
14.png

再扫描并连接wifi:
  1. wlan.scan()
  2. wlan.connect('WiFi名称','WiFi密码')
复制代码
15.png

试着获取下上海的天气预报数据:
  1. url = '论坛政策原因,请自行去雅虎weather API获取URL'
  2. import urequests
  3. res = urequests.get(url)
  4. res.text
复制代码
17.png

可以看到已经获取到了json格式文本的天气数据了。

下面就可以用ujson解析此json格式的文本,处理后输出到LCD屏幕或通讯端口。在此不再继续演示。

3.5. 离开shell,执行.py文件

推荐使用uPyLoader这样的软件来管理flash里的文件,并编写.py文件来运行。如下图:

18.png

注意,主文件名必须为main.py。

另外,建议讲代码调试好后自行编译成.mpy的中间文件存入,性能会更好。

4. 总结和拓展

可以看出,内置了WiFi+蓝牙的ESP32会是物联网上非常重要的连接部件。有很多第三方固件、语言和RTOS都支持ESP32,比如NodeLua、MicroPython、Arduino、FreeRTOS等等,可玩性较高。

MicroPython有语言简洁和支持快速开发的优点,但我也发现了其一个明显的缺点,就是至少我到现在没有找到蓝牙的调用方法,估计现在版本还没有被开发出来。
除了可以获取天气数据,其实还可以利用同样的方法获取股票数据、汇率数据、新闻数据等等任何可能的数据(想想魔镜和智能眼镜吧),更可以和其他的HTTP API互联,实现数据的抓取与物联网API互相调用的真实应用场景。

本次评测到此结束。如果大家对ESP32板子或MicroPython有需要交流的也可以留言。谢谢大家!





我要点赞 1

举报

发表于 2018-9-5 16:33:07
不错,写的比较详细,哈哈
可以尝试一下使用OV7560 摄像头做个wifi 摄像机
我要点赞 0

举报

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