micropython esp32驱动舵机_PCA9685舵机控制板与MicroPython-ESP32-1Z实验室
概要
阿凱在本文中講解了如何使用MicroPython-ESP32通過PCA9685模塊控制舵機(jī)旋轉(zhuǎn)角度。同時(shí)也涉及到了MicroPython-ESP32的I2C資源與API講解。
出品:1Z實(shí)驗(yàn)室 (1ZLAB: Make Things Easy)
目錄
PCA9685模塊簡介
pca9685.jpg
問題1:為什么我們要用到舵機(jī)驅(qū)動(dòng)模塊?
工作電壓 首先ESP32的工作電壓是3.3v,不能直接驅(qū)動(dòng)額定電壓在5v-7.4v的數(shù)字舵機(jī),需要外接電源。
工作電流 舵機(jī)工作電流在100MA~1.5A,運(yùn)動(dòng)越快電流越大,可能會損傷USB口.
IO資源 一般的開發(fā)板IO資源有限,例如控制一個(gè)6DOF的機(jī)械臂,需要占用六個(gè)IO口,如果是蛛形機(jī)器人的話需要用的也就更多,所以使用舵機(jī)驅(qū)動(dòng)板是一種節(jié)省IO資源的方式。
問題2:什么是PCA9685?
PCA9685是一款基于IIC總線通信的12位精度16通道PWM波輸出的芯片,該芯片最初由NXP推出時(shí)主要面向LED開關(guān)調(diào)光,但就目前國內(nèi)的形式來看,好像在被Arduino在舵機(jī)控制領(lǐng)域使用的更廣泛。 stm32+pca9685控制舵機(jī)機(jī)械臂
問題3:單片機(jī)與PCA9685如何通信?
pca9685-cascade.jpg
PCA9685模塊與單片機(jī)通過I2C總線的方式進(jìn)行通信。
I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間傳送信息。
每個(gè)PCA9685都可以分配一個(gè)地址位,通過I2C接口,一個(gè)單片機(jī)可以控制最多64個(gè)PCA9685舵機(jī)控制板。每個(gè)舵機(jī)控制板上可以搭載16個(gè)舵機(jī)。
詳細(xì)的使用說明見奇果派工坊的這篇文章,寫的很詳細(xì)。
MicroPython驅(qū)動(dòng)PCA9685
Adafruit公司開源了MicroPython控制PCA9685模塊的工程:
micropython-adafruit-pca9685
這里我們需要用到這個(gè)工程里面的兩個(gè)文件:
其中關(guān)于舵機(jī)驅(qū)動(dòng)的API看這里:Servo Driver
MicroPython-ESP32驅(qū)動(dòng)PCA9685
上傳庫文件
接下來講MicroPython-ESP32與PCA9685。
首先將micropython-adafruit-pca9685中的pca9685.py與servo.py保存到本地,并通過ampy上傳到ESP32的文件系統(tǒng)中。
創(chuàng)建一個(gè)I2C對象
在ESP32里面可以自定義引腳為I2C接口,支持I2C的管腳編號為:
0, 2, 4, 5, 9, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27
0號管腳還有2號管腳比較特殊,不推薦使用。
這里我們使用25號引腳作為SCL引腳(串行時(shí)鐘線),26號引腳為SDA(串行數(shù)據(jù)線)引腳。
連接方式
GND -> ESP32的GND (外接電源與ESP32共地)
SCL -> ESP32 D25
SDA -> ESP32 D26
VCC -> ESP32 3.3V
V+ -> 5v外接電源
代碼片段
from machine import I2C,Pin
gpio_scl = 25
gpio_sda = 26
# 初始化I2C
scl_pin = Pin(gpio_scl)
sda_pin = Pin(gpio_sda)
i2c = I2C(scl=scl_pin, sda = sda_pin, freq=10000) # 創(chuàng)建I2C實(shí)例
其中SCL時(shí)鐘頻率支持范圍 0 < freq ≤ 500000(Hz)
創(chuàng)建Servos對象
從之前的servo.py引入Servos對象,注意不是MicroPython自帶的Servo.
實(shí)例化的時(shí)候,傳入我們上面創(chuàng)建的I2C對象,同時(shí)指定當(dāng)前PCA9685模塊的地址,默認(rèn)是0x40, 你也可以通過焊接PCA9685模塊上面的焊點(diǎn)修改地址編號。
from servo import Servos
servos = Servos(i2c, address=0x40)
控制舵機(jī)的角度
設(shè)定舵機(jī)控制板上的舵機(jī)編號servo_idx, 有效范圍為1-16
另外設(shè)置舵機(jī)舵機(jī)的角度degree。
TODO 查看源碼 確認(rèn)degree的范圍
servos.position(servo_idx, degrees=degree)
項(xiàng)目實(shí)戰(zhàn)
face-track.png
參考文章
1ZLAB推廣
出品:1Z實(shí)驗(yàn)室 (1ZLAB: Make Things Easy)
1Z實(shí)驗(yàn)室 Make Things Easy . 致力于在機(jī)器人+計(jì)算機(jī)視覺+人工智能的重疊區(qū)域, 制作小白友好的教程.
ad.png
總結(jié)
以上是生活随笔為你收集整理的micropython esp32驱动舵机_PCA9685舵机控制板与MicroPython-ESP32-1Z实验室的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ 对二维数组排序 升序 降序
- 下一篇: python with open 循环建