风筝
发表于: 2019-1-21 11:48:57 | 显示全部楼层

使用Arduino和ESP8266模块通过网页控制伺服电机。


在本篇文章中,我们将实现通过网页控制伺服电机。网页将使用ESP8266模块创建,通过移动网页上的滑块,伺服电机将相应的进行移动。


将ESP8266连接到Arduino UNO开发板

Web-controlled servo circuit diagram .jpg

网络控制伺服电路图


首先,将ESP8266与Arduino连接。我们使用适配器将esp8266连接到Arduino连接起来,这将使连接更加容易。该适配器具有5至3.3V稳压器,您无需连接任何外部电阻。

●    将适配器的GND连接到Arduino的GND

●    将适配器的VCC连接到Arduino的5V

●    将RX从适配器连接到Arduino的引脚2

●    将TX引脚从适配器连接到Arduino的引脚3


然后,将伺服电机与Arduino连接。将伺服电机与Arduino连接如下:

●    伺服电机的黑线连接到Arduino的GND引脚

●    伺服电机的红线连接到Arduino的5V引脚

●    伺服电机的黄线到Arduino的引脚8


制作网页

要通过网页控制伺服电机,我们必须使用HTML语言制作网页。我们为项目创建的HTML代码可以从本文末尾下载。如果要重命名文件,请更改文件名,但请确保其末尾有“.html”。


之后,下载JQUERY文件并将此文件放在放置HTML文件的同一文件夹中。之后,打开HTML,网页将如下所示:

webpage .jpg


现在,使用您的Wi-Fi名称和密码更改Arduino代码中的Wi-Fi名称和密码。然后上传代码。打开串行监视器,它将显示IP地址,如下图所示:

IP address.jpeg


在网页上指定的空白处键入此IP地址。现在,当您移动滑块时,伺服电机将移动。


代码说明

首先,包括软件串口和伺服电机的库。软件串口库将帮助我们在Arduino的其他引脚上使用TX和RX通信。伺服电机库将帮助我们轻松移动伺服。之后,我们定义了从ESP8266连接RX和TX的引脚,然后定义了连接伺服电机的引脚。


之后,我们定义了从ESP8266连接RX和TX的引脚,然后定义了连接伺服电机的引脚。

  1. #include <SoftwareSerial.h>
  2. #include <Servo.h>
  3. SoftwareSerial esp8266(2,3);
  4. #define DEBUG true
  5. #define sg90_pin 8
复制代码

然后在setup()函数中,我们指示Arduino将伺服电机连接到哪个引脚,并将电机移动到最大位置。然后我们设置串行通信的波特率和ESP8266的波特率为9600。您需要根据ESP8266的波特率设置ESP8266的波特率。您的ESP8266可能具有不同的波特率。

  1. sg90.attach(sg90_pin);
  2. sg90.write(maximum_position);
  3. sg90.detach();
  4. Serial.begin(9600);
  5. esp8266.begin(9600);
复制代码

以下命令将ESP8266连接到Wi-Fi网络,并将Web服务器设置为IP地址和端口。上传代码后,它将在串行监视器中显示。

  1. esp8266Data("AT+RST\r\n", 2000, DEBUG); //reset module
  2. esp8266Data("AT+CWMODE=1\r\n", 1000, DEBUG); //set station mode
  3. esp8266Data("AT+CWJAP="Tenda_31BC98","barcelona"\r\n", 2000, DEBUG);   //connect wifi network
  4. while(!esp8266.find("OK")) { //wait for connection
  5. }
  6. esp8266Data("AT+CIFSR\r\n", 1000, DEBUG);
  7. esp8266Data("AT+CIPMUX=1\r\n", 1000, DEBUG);
  8. esp8266Data("AT+CIPSERVER=1,80\r\n", 1000, DEBUG);
复制代码

Arduino将查看数据是否可用。如果移动了网页上的滑块,则ESP8266会根据移动的滑块将数据发送到Arduino。 Arduino根据ESP8266给出的值移动伺服电机。

  1. if (esp8266.available())  
  2. {
  3. if (esp8266.find("+IPD,"))
  4. {
  5. String msg;
  6. esp8266.find("?");
  7. msg = esp8266.readStringUntil(' ');
  8. String command = msg.substring(0, 3);
  9. String valueStr = msg.substring(4);   
  10. int value = valueStr.toInt();
复制代码

以下函数将命令发送到ESP8266,并在串行监视器上打印ESP8266的响应。

  1. String esp8266Data(String command, const int timeout, boolean debug)
  2. {
  3. String response = "";
  4. esp8266.print(command);
  5. long int time = millis();
  6. while ( (time + timeout) > millis())
  7. {
  8. while (esp8266.available())
  9. {
  10. char c = esp8266.read();
  11. response += c;
  12. }
  13. }
复制代码

代码

本文创建的HTML代码: webservo.rar (682 Bytes, 下载次数: 169)

跳转到指定楼层
fern
发表于: 2019-6-11 19:16:10 | 显示全部楼层

这个代码能不能在详细点
回复

使用道具 举报

fern
发表于: 2019-6-11 19:18:26 | 显示全部楼层

loop函数是哪一段
回复

使用道具 举报

风筝
发表于: 2019-6-11 21:33:32 | 显示全部楼层

fern 发表于 2019-6-11 19:18
loop函数是哪一段

附件是本文使用的完整代码,请查收: main.rar (892 Bytes, 下载次数: 116)
回复

使用道具 举报

fern
发表于: 2019-6-12 16:23:17 | 显示全部楼层

风筝 发表于 2019-6-11 21:33
附件是本文使用的完整代码,请查收:

好的,谢谢
回复

使用道具 举报

fern
发表于: 2019-6-12 18:03:15 | 显示全部楼层


这个适配器是必备的吗
回复

使用道具 举报

fern
发表于: 2019-6-12 18:10:47 | 显示全部楼层

fern 发表于 2019-6-12 18:03
这个适配器是必备的吗

开发板是选择UNO吗?我上传代码成功,串口监视器没反应
回复

使用道具 举报

风筝
发表于: 2019-6-12 22:04:10 | 显示全部楼层

fern 发表于 2019-6-12 18:03
这个适配器是必备的吗

适配器的主要目的是进行电平转换
回复

使用道具 举报

fern
发表于: 2019-6-13 22:26:03 | 显示全部楼层

打开热点,改WiFi密码这些然后烧写代码就行了吗
回复

使用道具 举报

C阿t
发表于: 2019-12-28 12:07:45 | 显示全部楼层

fern 发表于 2019-6-12 18:10
开发板是选择UNO吗?我上传代码成功,串口监视器没反应

我跟你一样的情况,老哥后来做出来了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-26 16:13 , Processed in 0.057750 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表