WEMOS D1 R1/R2 [ESP8266] + PCA9685 驱动舵机

PCA9685 16-Channel 12-BIT PWM Driver,某些淘宝卖家只是标注了16路舵机驱动模块。

PCA9685上有黄红黑三排针脚(红黑为正负极,黄色为PWM),每排标注0-15,共计16组。每组可以控制一个舵机。

本文以PCA9685代替前述名称。

这里需要注意 SDA和SCL引脚,SDA默认为4,SCL默认为5。

本文以 wemos d1 r1/r2控制,其名称也常带 UNO。外形酷似arduino uno。本质是基于ESP8266,但有5V输出,有DC接口,也可以在VIN供电使用较宽电压供电(如两节3.7V锂电池直接供电),类似arduino uno。
除了Wemos D1 R1与R2外还有D1 开发板 R32基于ESP32均是UNO类型的。理论上均可以使用本文代码,包括ardunio uno。除SDA和SCL针脚不可参考本文其他地方接线也适用。

观察wemos D1 R1开发板上的对应标注的是D4=SDA=D14,D3=SCL=D15。通过wemos D1 R1引脚定义头文件也可知道D4=4,D3=5。
wemos D1 R2开发板也标注了 三处SDA和SCL ,这些是互通的。SDA=D2,SCL=D1。

其它开发板正常情况4和5也是 SDA和SCL引脚。

但是记得WEMOS D1 开发板除D0不支持I2C以外其他引脚均可以,因此用其他引脚也是可以的,需要修改代码。

接线

  • wemos D1 R1/R2 与PCA9685接线

    wemos D1 R1/R2引脚 PCA9685引脚
    5V V+
    3.3V VCC
    SDA SDA
    SCL SCL
    GND GND
  • PCA9685与舵机接线

    鄙人使用的SG90舵机,PCA9685上有黄红黑三排针脚,每排0-15,共计16组。每组可以控制一个舵机。

    后文提供的代码,是以0号位的三根黄红黑接入SG90舵机为例。

    PCA9685引脚 SG90舵机引脚
    黄色(PWM) 黄色
    红色 (V+) 红色
    黑色 (GND) 棕色
  • 总体接线

#mermaid-svg-OXV5kmtolI4iUZme {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OXV5kmtolI4iUZme .error-icon{fill:#552222;}#mermaid-svg-OXV5kmtolI4iUZme .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OXV5kmtolI4iUZme .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-OXV5kmtolI4iUZme .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OXV5kmtolI4iUZme .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OXV5kmtolI4iUZme .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OXV5kmtolI4iUZme .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OXV5kmtolI4iUZme .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OXV5kmtolI4iUZme .marker.cross{stroke:#333333;}#mermaid-svg-OXV5kmtolI4iUZme svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OXV5kmtolI4iUZme .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OXV5kmtolI4iUZme .cluster-label text{fill:#333;}#mermaid-svg-OXV5kmtolI4iUZme .cluster-label span{color:#333;}#mermaid-svg-OXV5kmtolI4iUZme .label text,#mermaid-svg-OXV5kmtolI4iUZme span{fill:#333;color:#333;}#mermaid-svg-OXV5kmtolI4iUZme .node rect,#mermaid-svg-OXV5kmtolI4iUZme .node circle,#mermaid-svg-OXV5kmtolI4iUZme .node ellipse,#mermaid-svg-OXV5kmtolI4iUZme .node polygon,#mermaid-svg-OXV5kmtolI4iUZme .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OXV5kmtolI4iUZme .node .label{text-align:center;}#mermaid-svg-OXV5kmtolI4iUZme .node.clickable{cursor:pointer;}#mermaid-svg-OXV5kmtolI4iUZme .arrowheadPath{fill:#333333;}#mermaid-svg-OXV5kmtolI4iUZme .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OXV5kmtolI4iUZme .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OXV5kmtolI4iUZme .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-OXV5kmtolI4iUZme .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-OXV5kmtolI4iUZme .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OXV5kmtolI4iUZme .cluster text{fill:#333;}#mermaid-svg-OXV5kmtolI4iUZme .cluster span{color:#333;}#mermaid-svg-OXV5kmtolI4iUZme div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OXV5kmtolI4iUZme :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-OXV5kmtolI4iUZme .yellow>*{fill:#ffc107!important;Color:#FDF8E6FF!important;}#mermaid-svg-OXV5kmtolI4iUZme .yellow span{fill:#ffc107!important;Color:#FDF8E6FF!important;}#mermaid-svg-OXV5kmtolI4iUZme .red>*{fill:#dd6161!important;Color:#d3c1c1!important;}#mermaid-svg-OXV5kmtolI4iUZme .red span{fill:#dd6161!important;Color:#d3c1c1!important;}#mermaid-svg-OXV5kmtolI4iUZme .blk>*{fill:#222222!important;Color:#CCCCCC!important;}#mermaid-svg-OXV5kmtolI4iUZme .blk span{fill:#222222!important;Color:#CCCCCC!important;}#mermaid-svg-OXV5kmtolI4iUZme .pwm>*{fill:#FFFFFF!important;}#mermaid-svg-OXV5kmtolI4iUZme .pwm span{fill:#FFFFFF!important;}#mermaid-svg-OXV5kmtolI4iUZme .bwn>*{fill:#9f5307!important;Color:#CCCCCC!important;}#mermaid-svg-OXV5kmtolI4iUZme .bwn span{fill:#9f5307!important;Color:#CCCCCC!important;}

舵 机
PCA9685
0
D1 R1/R2
黄色
红色
棕色
V+
VCC
SDA
SCL
GND
黄色PWM
红色V+
黑色GND
3.3V
5V
SDA
SCL
GND

代码

  • 需要库 adafruit/Adafruit PWM Servo Driver Library

    • 使用arduino IDE

      使用arduino IDE可以在库管理 搜索Adafruit PWM Servo Driver Library

      选择 项目 -> 加载库 -> 库管理 打开库管理进行搜索

      或者按 Ctrl + Shift + I 打开库管理进行搜索

    • 使用platformio(基于Vscode或者clion)

      platformio.ini添加以下内容:

      lib_deps = adafruit/Adafruit PWM Servo Driver Library@^2.4.0
      
  • 代码内容

    根据自己接入的舵机是[0-15]具体哪一通道需要修改loop中调用 pwm.setPWM 传参的第一个参数。

    本例子是先正转到上限,回正再反转到上限。设置了上限下限和中间值的点。可以根据实际情况调节上下限。
    此处for循环是逐步设置角度,使得稍微丝滑一些,不用循环也是可以的。

    
    #include <Adafruit_PWMServoDriver.h>
    #include <Wire.h>Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();#define SERVOUP 150    //上限
    #define SERVOMID 375   // 中间值
    #define SERVODOWN 600  // 下限void setup() {Serial.begin(115200);Serial.println("channel [0] Servo test!");pwm.begin();pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
    }void loop() {Serial.println("off ");for (uint16_t pulselen = SERVOMID; pulselen < SERVODOWN; pulselen++) {// 舵机接在 第n组针脚上,则是 pwm.setPWM(n, 0, pulselen);pwm.setPWM(0, 0, pulselen);}delay(500);for (uint16_t pulselen = SERVODOWN; pulselen > SERVOMID; pulselen--) {pwm.setPWM(0, 0, pulselen);}Serial.println("on ");delay(1000);for (uint16_t pulselen = SERVOMID; pulselen > SERVOUP; pulselen--) {pwm.setPWM(0, 0, pulselen);}delay(500);for (uint16_t pulselen = SERVOUP; pulselen < SERVOMID; pulselen++) {pwm.setPWM(0, 0, pulselen);}delay(3000);
    }
  • 重设SDA SCL

    若不希望使用默认I2C引脚,同时其他引脚也支持I2C,可以参照当前方法重设I2C引脚。

    读源码可知,调用 TwoWire 的pins函数重设sda /scl引脚

    void TwoWire::pins(int sda, int scl)
    {default_sda_pin = sda;default_scl_pin = scl;
    }
    

    Adafruit_PWMServoDriver 重设sda scl引脚部分示例,此处只给出了setup函数

    #include <Adafruit_PWMServoDriver.h>
    #include <Wire.h>TwoWire wire = TwoWire();
    Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver(PCA9685_I2C_ADDRESS, wire);void setup() {Serial.begin(115200);while (!Serial) {}Serial.println("servoArm start!");wire.pins(D11, D10);pwm.begin();pwm.setPWMFreq(60);  // Analog servos run at ~60 Hz updates
    }
    // 其它内容省略
    

WEMOS D1 R1/R2 [ESP8266] + PCA9685 驱动舵机相关推荐

  1. 物联网-wemos D1 Mini (esp8266)实验十 ---服务器版温度计

    物联网-wemos D1 Mini (esp8266)实验十 ---服务器版温度计 概述 实验材料 硬件连接图 引脚对照表 DHT库的引入 网页代码 Arduino端代码 效果展示 概述 Wemos ...

  2. wemos d1 r1点亮st7735s屏幕(Z180SN019)

    使用wemos d1 r1点亮st7735s屏幕 wemos d1 r1是一个价格美丽但是资料很乱的板子,买来后闲置了很久,因为从淘宝入手了一块屏幕所以想用它点亮一下. 屏幕型号是Z180SN019. ...

  3. wemos D1 Mini (esp8266)实验九 --- blynk APP远程控制格力空调开机并显示温湿度DHT22

    物联网-wemos D1 Mini (esp8266)实验九 --- blynk APP远程控制格力空调开机并显示温湿度 概述 实验材料 硬件 硬件连接图 引脚连接对照表 Arduino端软件编写 测 ...

  4. Jetson nano使用PCA9685驱动舵机

    现在英伟达官方提供的镜像包已经很智能了,所以网上好多Jetson nano使用PCA9685驱动舵机的教程里的要下载的库其实都不需要了,按照之前的教程走只会报错,自己摸索了下,仅供参考. ** 1.导 ...

  5. WeMOS D1 MIni(Esp8266)、NodeMCU与ST7789 TFT液晶显示屏绘制图形

    WeMOS D1 MIni(Esp8266).NodeMCU与ST7789 TFT液晶显示屏绘制图形 材料 硬件连接图 Arduino IDE支持Wemos D1 Mini. 库安装 Arduino_ ...

  6. 物联网-wemos D1 Mini (esp8266)实验五 -- 与Blynk合作的土壤湿度检测与远程浇花系统

    1.材料: 2N2222 * 1 静音水泵*1 1K电阻*1 土壤湿度传感器 (带LM393模块)* 1 D1 Mini *1 面包板 *1 接线夹一个 杜邦线若干 2.Blynk针对树莓派 ardu ...

  7. 阿里云IOT入门教程(三)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭

    阿里云IOT入门教程(一)阿里云IOT Studio自建手机App控制Wemos D1 Mini( ESP8266 )板载灯亮灭 概述 所需材料 Mqtt预备知识 hacklab端开发 * 硬件端上报 ...

  8. arduino温湿度计库文件_用ARDUINO开发板自制温湿度计(含WEMOS D1开发板环境安装)...

    ARDUINO从入门到创客带师第四弹 自制温湿度计(翻车) 咱想起以前实验室的墙上挂着的介绍说过法拉第之所谓伟大的原因是他不止把成功的经历写在科学日记里,也把翻车失败的经历写进去,因此咱对于咱翻车的经 ...

  9. 使用arduino D1 wifi模块(WeMos D1)连接阿里云物联网平台并成功实现APP点亮板载LED(三)---D1 wifi模块连接网络

    做硬件实验,切记不要奢望一蹴而就.哪怕是对照网络上的文章一步步操作,也不会一次成功.因为总有一些细节是自己容易忽略的,你要具备一定的基础知识才能将遇到的小问题排除,才能保证操作成功.甚至有的人操作系统 ...

最新文章

  1. 博世发布7款传感器新品 从汽车到消费电子
  2. 【译】一份通俗易懂的React.js基础指南-2018
  3. Oracle Purge和drop的区别
  4. 阿里云发布迁移解决方案,“迁移上云”这件事有专业的人做
  5. matlab中多边形滤波器,几种常见空间滤波器MATLAB实现
  6. 转:Java NIO系列教程(二) Channel
  7. 在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)
  8. linux 共享内存管理,什么是物理/虚拟/共享内存——Linux内存管理小结一
  9. android 消息循环滚动条,Android 电池电量进度条,上下滚动图片的进度条(battery)...
  10. 卡巴斯基发现医疗IT系统存安全漏洞
  11. 【前端】【HTML+CSS+JavaScript(JS)】简易工资计算器的实现
  12. 国内开源的镜像网站(很全很详细)
  13. JAVA打字游戏的实现
  14. HTML中<a></a>标签的四大功能 必看!必看!!必看!!!
  15. 存储过程(Stored Procedure)
  16. 7.10. RASP
  17. 为什么被水弄湿的纸干了后会变皱?
  18. 从控制台输入一个数字,判断这个数字是不是一个质数
  19. 【java】新建项目
  20. Kattis Problem-Unique Snowflakes

热门文章

  1. 通过Amazon SageMaker与Amazon Step Functions实现机器学习的CI/CD 方案
  2. CentOS 上 Tomcat 安装及配置
  3. uniapp项目运行到小米平板调试
  4. 货币战争5 读书笔记
  5. asp毕业设计——基于asp+access的校园网上购物平台设计与实现(毕业论文+程序源码)——网上购物平台
  6. 如何禁用计算机的网络适配器,怎么禁用网络适配器?禁用和卸载网络适配器的步骤...
  7. Themida是先进的Windows软件保护系统
  8. Gartner 2018内容与协作平台魔力象限:格局未定 新势力冒头!
  9. SwiftUI学习记录
  10. 计算机的配件比喻,笑到抽筋的笑话:电脑上有一个部件可用来形容你。