自己配置Ubuntu开发环境略麻烦, 后续1Z实验室会提供配置好的虚拟机给大家.
我们的PyESPCar开发教程以及OpenCV图像处理部分的教程都是在Ubuntu下进行的, 因为Ubuntu下开发环境更加友好. 同时针对VIP用户, 我们还提供Ubuntu远程协助的服务.
Ubuntu是你步入开源世界的大门. 你可以选择在虚拟机下安装Ubuntu, 也可以选择在真机上安装Ubuntu.
在Ubuntu下, 我们的工程使用Python一统天下, Python完成嵌入式开发,机器人控制, Python进行图像处理, Python进行物联网通信. 所以你只需要精通这一门语言就足够了.
为了大家方便, 这里我还是把Ubuntu所需配置的环境在这里讲一下, 做一下汇总.
如果你是用的Ubuntu虚拟机的话, 1Z实验室有虚拟机的安装教程:
git是工程版本管理工具, 你可以使用Git从Github克隆PyESPCar的开源工程.
在Ubuntu上安装git:
sudo apt-get install git
Ubuntu16.04自带的默认Python版本是python3.5, 需要安装pip3
作为python的包管理工具.
sudo apt-get install python3-pip
做科学计算需要安装下面的一些工具包
sudo pip3 install jupyter ipython numpy scipy matplotlib
非官方的OpenCV预编译的包. 同时安装opencv的main还有contrib部分.
pip install opencv-contrib-python
详情见文档: opencv-python 3.4.3.18
PyGame是用于写游戏的.
因为我们用到了PyGame的键盘事件监听, 所以需要安装这个包.
sudo pip3 install pygame
PyESPCar是基于MicroPython-ESP32的, 所以MicroPython-ESP32的基本操作, 是需要你自己去学习的.
完整的教程见1Z实验室出品的: MicroPython-ESP32从入门到差不多
下面的教程是你玩PyESPCar必须要看的.
- MicroPython-ESP32固件烧录
- ESP32的REPL使用方法
- ESP32接入WIFI热点
- 使用upip安装包
- WebREPL与MIcroIDE配置教程
- 利用AMPY进行文件同步
- MQTT入门之概念解析
- MQTT入门之项目实战
下方做了一下汇总:
一个是固件烧录, 你需要安装esptool
sudo pip3 install esptool --upgrade
通过REPL与MicroPython-ESP32交互, 你需要使用picocom
sudo apt-get install picocom
详情见: ESP32的REPL使用方法
通过AMPY进行文件同步, 需要安装AMPY
sudo pip3 install adafruit-ampy --upgrade
详情见: 利用AMPY进行文件同步
MQTT相关的, 需要安装mosquitto
sudo apt-get install mosquitto mosquitto-clients
使用pip3 安装paho-mqtt
sudo pip3 install paho-mqtt
详情见: MQTT入门之项目实战
PyESPCar的工程文件见:
https://github.com/1zlab/1ZLAB_PyEspCar
使用git将这个文件夹clone克隆到本地文件夹.
对git不熟悉的同学, 需要自学一下git相关的操作.
git clone https://github.com/1zlab/1ZLAB_PyEspCar.git
这里主要讲一下工程里面源码的分布:
src/esp32
里面是micropython-esp32相关的代码.
src/pc
上面的代码是在PC上运行的.
➜ src git:(master) ✗ tree
.
├── esp32
│ ├── battery_voltage.py
│ ├── button.py
│ ├── car_config.py
│ ├── car.py
│ ├── cloud_platform.py
│ ├── led.py
│ ├── main.py
│ ├── motor.py
│ ├── mqtt_control_mode.py
│ ├── pca9685.py
│ ├── test_car.py
│ ├── test_motor.py
│ └── user_button.py
└── pc
├── car_config.py
├── pyespcar_sdk.py
├── README.md
└── test_pyespcar_sdk.py
需要修改src/esp32/mqtt_control_mode.py
的源码.
这里的SERVER
是我本机(Ubuntu)的IP地址.
SERVER = '192.168.43.16'
CLIENT_ID = 'PYESPCAR_A0'
MQTT_TOPIC_ID = b'PYESPCAR_CTL_MSG'
如何查看PC在局域网的IP地址? 在bash里面输入:
ifconfig
其中的inet 地址:192.168.2.211
就是我们的本地地址.
局域网下每个设备的IP地址都是不一样的.
注意 SERVER是Ubuntu的IP地址, 不是ESP32的IP地址
注意 SERVER是Ubuntu的IP地址, 不是ESP32的IP地址
注意 SERVER是Ubuntu的IP地址, 不是ESP32的IP地址
如果你用的是真机可以跳过这个步骤.
另外如果你使用是虚拟机, 默认一般是NAT网络, 局域网下的设备访问不了虚拟机, 主机也访问不了虚拟机.
首先需要把当前的虚拟机关闭.
在虚拟机的设置选项, 点击网络, 需要把网络设置为桥接模式. 设置完成之后, 重启虚拟机. Virtualbox默认是自动配置完成, 局域网IP分配默认会设置为 DHCP.
在Ubuntu虚拟机里面执行ifconfig
查看更新后的IP地址.
后面的操作假定,你的Host主机是Windows.
查看你的Host主机跟虚拟机的IP前缀是否一样, 例如 Host是192.168.2.4
, 虚拟机的IP是192.168.2.221
, 他们的前缀都是192.168.43 , 所以是在一个局域网下.
假如你的Host主机是Windows的, 打开Windows的CMD, 输入命令行, 查看IP
ipconfig
然后看在主机能不能ping通虚拟机:
ping 192.168.2.221
如果可以ping通, 就可以进行下一步的配置.
克隆下来之后src
文件夹下是所有的PyESPCar
的源码. 其中src/esp32
文件夹下的文件是需要上传到ESP32开发板的.
1Z实验室后续发货的开发板(带核心板)的版本已经帮大家上传好了所需的文件. 但是src/esp32/mqtt_control_mode.py 还是需要你自己再传一下.
那用什么方式传文件呢?
- 你可以选择使用1Z实验室的EMP IDE, 在Web上面把文件一个个传上去.
- 可以使用AMPY, 通过命令行的方式一个一个将文件传进去.
- 另外阿凯也写了一个批量上传的脚本, update-all . 通过ampy上传当前目录下的所有文件.
自我检查, 文件名命名, 内容有没有粘贴错误!!!!
打开PyESPCar电源开关, 电源指示灯会亮.
这一步很重要!!!
WebREPL模式会跟MQTT通信资源抢占, 导致网络不稳定.
main.py
里面默认上电运行的是mqtt模式, 所以我们需要把webrepl模式关掉.
注: webrepl模式关掉, 也就意味着关掉后不能与EMP IDE进行连接.
设置boot启动模式为1
boot with wifi startup
>>> import emp_boot
>>> emp_boot.set_boot_mode()
填入数字1
,
完成配置.
在执行下一步之前, 确保你已经:
- 通过picocom连接到ESP32开发板的REPL: ESP32的REPL使用方法
- 按照教程里面的说明, 连接上了WIFI热点: ESP32接入WIFI热点 , PC与ESP32连入同一个局域网.
- 通过upip安装了
emp-1zlab
与umqtt.simple
使用upip安装包 , MQTT入门之项目实战 - 将PyESPCar的工程文件, 传入到了ESP32的文件系统中.
- 关闭esp32的webrepl模式
- 打开PyESPCar的电源开关
- 按下开发板上的reset按钮, 重启后自动进入MQTT远程控制模式.
首先确保PyESPCar进入了MQTT模式, 成功连入局域网.
src/pc
下面是PyESPCar SDK 的源码还有简单的测试.
首先我们要进入到src/pc
所在的目录下.
然后执行ipython
, 进入交互式命令行模式.
输入以下内容, 执行测试pyespcar sdk的测试程序.
exec(open('test_pyespcar_sdk.py').read(), globals())
然后你就可以调用sdk
的各种方法, 进行测试.
例如调用turn_left
方法, 让小车左转.
>>> sdk.turn_left()
Topic: PYESPCAR_CTL_MSG
SEND: TURN_LEFT,60
[INFO] car turn left, speed: 60, delay_ms: None
调用turn_right
方法, 让小车右转.
>>> sdk.turn_right()
Topic: PYESPCAR_CTL_MSG
SEND: TURN_RIGHT,60
[INFO] car turn right, speed: 60, delay_ms: None
详情见src/pc/pyespcar_sdk.py
examples
下是目前所有的PyESPCar的样例代码.