以前的几篇文章对伺服电机做了一些基础的介绍,包括:伺服电机是如何工作的? 树莓派PWM控制舵机的两种方式 ,这次,尝试一下Nodemcu如何控制伺服电机。我们都知道伺服电机是一种用于精确控制旋转角度的电动装置。它被用于一些要求精确控制的应用场景,比如控制机械臂,像Axidraw写字机器人的抬笔机构等。伺服电机的运动角度是通过施加一个PWM信号来控制的,通常这个PWM信号的频率为50Hz,我们可以通过改变PWM信号的宽度,来控制伺服电机的旋转角度和方向。更多信息可查阅:秒懂舵机角度控制原理。
声明:舵机的正式名称应该叫伺服电机,舵机只是习惯称谓。文章中都尽量使用伺服电机这个称呼。
NodeMCU的PWM引脚
NodeMCU是如何控制伺服电机的呢?这有的回到伺服电机的控制的本质:伺服电机运动的角度是施加一个PWM信号来控制的。那就需要验证Nodemcu上是否有PWM引脚
上图给出了Nodemcu v0.9 和Nodemcu v1.0两个版本的引脚对比图,左边的v0.9集成了ESP8266-12(E-12)模块,右边的v1.0集成了ESP8266-12E(E-12E)模块。哪些引脚才支持PWM信号呢?上图标有“~”正弦波的引脚均支持PWM信号,两个Nodemcu版本支持PWM信号的引脚是一样的,分别是:GPIO 00,GPIO 01,GPIO 02,GPIO 03,GPIO 04,GPIO 05,GPIO 12,GPIO 13,GPIO 14,GPIO 15,共10个引脚支持PWM信号。
NodeMCU v1.0与SG90舵机连线图
下面我尝试使用GPIO 14引脚来做测试。伺服电机SG90和NodeMCU的连接图如下:
NodeMCU控制SG90舵机代码
#include <Arduino.h> #include <Servo.h> Servo servo; void setup () { servo.attach(14);//PWM引脚设置,与GPIO引脚号对应. } void loop () { // To 0° servo.write(0); delay(1000); // To 90° servo.write(90); delay(1000); // To 180° servo.write(180); delay(1000); }