基于51单片机esp8266 01s控制舵机程序
时间: 2023-07-16 08:17:23 浏览: 193
以下是一个简单的基于51单片机和ESP8266-01S模块控制舵机的程序,你可以根据自己的需求进行修改。
```c
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#define BAUD 9600 // ESP8266的波特率
#define TIMER_VALUE 65536-((11059200/12)/(32*BAUD)) // 定时器计算公式
sbit servo = P2^0; // 用P2.0控制舵机
unsigned char esp_data;
// 延时函数
void delay(unsigned int i)
{
unsigned int j, k;
for (j = 0; j < i; j++)
{
for (k = 0; k < 125; k++);
}
}
// 串口初始化
void uart_init()
{
TMOD |= 0x20;
TH1 = TIMER_VALUE / 256;
TL1 = TIMER_VALUE % 256;
PCON |= 0x80;
SCON = 0x50;
TR1 = 1;
}
// 串口发送一个字符
void uart_send(unsigned char dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}
// 串口接收一个字符
unsigned char uart_receive()
{
while (!RI);
RI = 0;
return SBUF;
}
// 向ESP8266发送AT指令
void send_at_cmd(char *cmd)
{
while (*cmd)
{
uart_send(*cmd++);
}
uart_send('\r');
uart_send('\n');
}
// 接收ESP8266返回的数据
void receive_data()
{
unsigned char i = 0;
while (1)
{
esp_data = uart_receive();
if (esp_data == 'O')
{
esp_data = uart_receive();
if (esp_data == 'K')
{
break;
}
}
if (i++ > 100)
{
break;
}
}
}
// 控制舵机旋转
void rotate_servo(int angle)
{
if (angle < 0 || angle > 180)
{
return;
}
unsigned int time = (unsigned int)angle * 11 + 500; // 计算脉冲宽度
servo = 1; // 输出高电平
delay(time); // 延时
servo = 0; // 输出低电平
delay(20000 - time); // 延时
}
void main()
{
uart_init(); // 串口初始化
send_at_cmd("AT+RST"); // ESP8266复位
receive_data();
send_at_cmd("AT+CWMODE=1"); // 设置为Station模式
receive_data();
send_at_cmd("AT+CWJAP=\"ssid\",\"password\""); // 连接WiFi
receive_data();
while (1)
{
send_at_cmd("AT+CIPSTATUS"); // 查询连接状态
receive_data();
if (strstr((char *)&esp_data, "STATUS:3"))
{
send_at_cmd("AT+CIPSTART=\"TCP\",\"192.168.1.100\",80"); // 连接服务器
receive_data();
send_at_cmd("AT+CIPSEND=5"); // 发送数据长度
receive_data();
send_at_cmd("hello"); // 发送数据
receive_data();
send_at_cmd("AT+CIPCLOSE"); // 关闭连接
receive_data();
}
rotate_servo(90); // 控制舵机旋转到90度
delay(1000);
rotate_servo(0); // 控制舵机旋转到0度
delay(1000);
rotate_servo(180); // 控制舵机旋转到180度
delay(1000);
}
}
```
注意事项:
1. 在使用ESP8266模块之前,需要将其设置为透传模式,具体方法可以参考ESP8266模块的使用文档。
2. 程序中的WiFi名称和密码需要根据实际情况进行修改。
3. 本程序中使用的舵机是SG90,如果使用其他型号的舵机,需要根据其脉冲宽度进行计算。
阅读全文