基于Arduino IDE开发的ESP8266(ESP-12F)项目6 ——舵机控制

  本次写这篇文章是自己做一下学习记录,如有错误,还请大家斧正!!!

日后及时修正!感谢支持!

 欢迎大家的关注        点赞        收藏        留言


目录

前言

        一、新建工程

        二、项目函数介绍                        

        三、代码编写

        四、编译、烧录、运行

结束语


前言

        舵机的控制是每一位单片机开发者、航模爱好者都喜欢的一项电子元器件,也一直被电子爱好者所喜爱。接下来我就舵机出一版关于ESP8266控制的教程,本次使用的舵机是SG90(180°不带物理限位的)。


 一、新建工程

        首先打开Arduino IDE,点击 文件——> 点击新建,就会生成一个新的工程模板了。 (还可以点任务栏中“折了一角的书页”快速新建)。

 然后给项目重命名,然后再保存。

 这样一个新的工程就建好了。


二、项目基本函数介绍

        Arduino IDE 有其大佬写好的关于舵机的库,在这里我向大家展示的仅是个人对其的提取,也是个人觉得用得到的函数。还想继续了解这个库大家可以从Arduino 官网查询。

        Servo 含需要进行宏定义如下:

Servo sg90;

在这里我就定义了一个用舵机的sg90代替; 

1. 自命名.attach()函数

  (1)自命名.attach(pin) 函数

参数说明
pin

舵机连接到的引脚编号

 (2)自命名.attach(pin, min, max)函数

参数说明
pin

舵机连接到的引脚编号

min

脉冲宽度,以微秒为单位,对应于伺服器上的最小(0 度)角度(默认为 544)

max

脉冲宽度,以微秒为单位,对应于伺服器上的最大(180度)角度(默认为2400)

2.  自命名.write()函数        

        将值写入伺服器,相应地控制轴。在标准伺服器上,这将设置轴的角度(以度为单位),将轴移动到该方向。在连续旋转舵机上,这将设置舵机的速度(0表示一个方向的全速,180表示另一个方向的全速,接近90的值表示无运动)。

(1)自命名.write(angle)函数

参数说明
angle

写入舵机的值,从0到180

3.  自命名.writeMicroseconds()函数   

        以微秒 (us) 为单位向伺服器写入一个值,从而相应地控制轴。在标准舵机上,这将设置轴的角度。在标准舵机上,参数值 1000 完全逆时针,2000 完全顺时针,1500 在中间。请注意,一些制造商没有非常严格地遵循此标准,因此伺服器通常响应700和2300之间的值。随意增加这些端点,直到伺服器不再继续增加其范围。但请注意,尝试驱动伺服器通过其端点(通常由咆哮声表示)是一种高电流状态,应避免。连续旋转舵机将以类似于写入函数的方式响应写入微秒函数。

(1)自命名.writeMicroseconds(us)函数

4.  自命名.read()函数 

        读取伺服器的当前角度(传递给上次调用 write()的值)。

(1)自命名.read()函数

5.  自命名.attached()函数 

        检查伺服变量是否连接到销钉。

(1)自命名.attached()函数

6.  自命名.detach()函数 

        将伺服变量与其引脚分离。如果所有伺服变量都被分离,则引脚9和10可用于具有analogWrite()的PWM输出。

(1)自命名.detach()函数


 三、代码编写

        此次的项目是用按键控制舵机,开始给定舵机一个初始角度,按键按一下舵机转一定角度,当达到一定角度后回到初始角度。给出舵机的值会通过串口打印在电脑上。

        示例代码如下:

#include "Servo.h"

Servo sg90;

int angle=0,angle_1=0;

void setup() {
  // put your setup code here, to run once:
  pinMode(0,INPUT);
  
  Serial.begin(115200);
  
  while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB
      }

  sg90.attach(4);
  sg90.write(0);

}

void KEY_Init(void)
{
  if(digitalRead(0)==0)
  {
    delay(10);
    if(digitalRead(0)==0)
    {
        angle=angle+5;
        Serial.print("输入角度为:");
        Serial.println(angle);
    }
    while(digitalRead(0)==0);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  KEY_Init();
  sg90.write(angle);
  
  angle_1=sg90.read();
  if(((angle_1>=0)&&(angle_1<=180))&&((angle>=0)&&(angle<=180))!=0)
  {
    Serial.print("输出角度为:");
    Serial.println(angle_1);
  }
  else
  {
    sg90.write(0);
    angle=0;
  }
}

 四、编译、烧录、运行

        在我前一篇博文就介绍了如何编译、烧录,这里就不再过多赘述了,还望谅解!


 结束语

        关于此次基于Arduino IDE开发的ESP8266(ESP-12F)项目6 ——舵机控制项目的介绍就讲到这里了,如果什么问题请再评论区留言。

        接下来会陆陆续续发布一些其他的教程,敬请期待!感谢大家的支持!如有觉得这篇文章对你有所帮助的,还请点赞、收藏吧!

  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用ArduinoESP8266模块来控制。首先需要将ESP8266模块连接到Arduino板上,然后使用Arduino IDE编写程序,通过ESP8266模块连接到WiFi网络,接着使用PWM输出控制的角度。具体的步骤和代码可以在网络上找到相关的教程和示例。 ### 回答2: Arduino是一种开源的电子开发平台,在各种项目中都得到了广泛的应用。而ESP8266是一款小型的WiFi模块,它与Arduino配合使用,可以大大增强Arduino的功能,实现更多的智能控制是一种常用的“输出元件”,通过控制PWM信号的占空比,就可以控制的旋转角度和速度。在Arduino中,可以使用PWM的输出口控制。 下面是一个简单的控制的流程: 1. 确定的Pin口:将连接到Arduino板上,通常是将的红色线连接到5V电源,黑色线连接到GND,信号线连接到一个数字输出口(如9号口)。 2. 定义程序变量:定义变量来存储的初始角度(通常为90度),并将其设置为输出模式。 ```c++ #include <Servo.h> //引用库 Servo myservo; //创建一个Servo对象 int initPos = 90; //定义的初始角度 ``` 3. 初始化程序:在“void setup()”函数中,使用“myservo.attach()”命令将连接到Arduino的数字输出口,并将旋转到初始角度。 ```c++ void setup() { myservo.attach(9); //将连接到9号口 myservo.write(initPos); //将转到初始角度 } ``` 4. 控制运动:在“void loop()”函数中,使用“myservo.write()”命令来控制运动。 ```c++ void loop() { myservo.write(0); //将转到0度 delay(1000); //延迟1秒 myservo.write(180); //将转到180度 delay(1000); //延迟1秒 } ``` 通过修改“myservo.write()”命令中的参数,可以控制在任意角度旋转,并设置延迟时间来控制旋转速度。 如果要通过WiFi无线控制,就需要借助ESP8266模块。首先,需要在Arduino IDE中安装“ESP8266Wifi”和“WiFiUdp”库,然后可以编写如下的代码: ```c++ #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <Servo.h> WiFiUDP Udp; Servo myservo; char ssid[] = "your_SSID"; //WIFI名称 char password[] = "your_Password"; //WIFI密码 unsigned int localUdpPort = 8888; //本地UDP端口号 int initPos = 90; //定义的初始角度 int pos = 90; //记录当前的位置值 void setup() { myservo.attach(9); //将连接到9号口 myservo.write(initPos); //将转到初始角度 Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Udp.begin(localUdpPort); } void loop() { int packetSize = Udp.parsePacket(); if (packetSize) { //如果有数据到达 char packetBuffer[255]; Udp.read(packetBuffer, 255); String command(packetBuffer); Serial.println(command); if (command == "L") { if (pos > 0) { pos--; myservo.write(pos); delay(15); } } else if (command == "R") { if (pos < 180) { pos++; myservo.write(pos); delay(15); } } } } ``` 上述代码中,首先需要定义WIFI的名称和密码,然后监听本地的8888端口号,等待客户端通过UDP协议发送指令。然后将接收到的指令转换成字符串,如果是"L"指令,就让向左旋转,如果是"R"指令,就让向右旋转。同时,也需要实现延迟功能,以免旋转过快导致出现不稳定的情况。 通过ESP8266模块与无线网络的连接,可以轻松地实现的远程控制,为各种创意项目提供了更加丰富的可能性。 ### 回答3: Arduino是一种开源的电子开发平台,ESP8266是一种无线网络模块,是一种可以旋转到特定角度的电。通过将这三种元件结合在一起,可以实现Arduino ESP8266控制的操作。 首先需要在Arduino IDE中安装ESP8266的开发环境,通过连接ESP8266模块与Arduino板的串口,将代码上传至ESP8266模块。接着,需要连接控制线和电源线至Arduino板,将电源线与正极连接至5v端口,将负极连接至GND端口,将控制线连接至数字引脚。 在代码中,需要包含Servo库,创建一个对象,指定控制线所连接的引脚。使用对象中的attach()函数将控制线连接至指定引脚,使用write()函数控制的转动。利用ESP8266模块中的WiFi功能,可以通过网络远程控制的转动。 例如,可以在浏览器中输入一个URL,通过访问该URL,触发ESP8266模块中的处理函数,从而控制的转动。在处理函数中,可以调用对象的write()函数,实现的转动,从而控制器人等装置的运动。 总的说来,Arduino ESP8266控制需要通过连接硬件,安装开发环境,编写代码等步骤实现。通过网络远程控制,可以为控制器人等装置带来更多的便利和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值