esp8266+单片机之最最简单(AT指令)应用(一)

51单片机+esp8266 wifi模块的STA模式

模块作为客户端发送数据给远程主机

烧代码前需要先配置一下WiFi模块,AT+CWJAP,让其先加入一个有效网络

#include<reg52.h>
#include<stdio.h>

#define uchar unsigned char 
#define uint unsigned int

void delayms(uint x)   //51单片机的常用延时方式
{
	uint i,j;
	for(i=x;i>0;i--)
		for(j=110;j>0;j--);
}

void uart_init()      //串口的初始化
{
	TMOD = 0x20;
	TH1 = 0XFd;
	TL1 = 0XFd;
	SCON = 0x50;
	PCON = 0X00;
	TR1 = 1;
	EA = 1;
	ES = 1;
} 

void wifi_init()      //初始化wifi模块
{
	ES = 0;       //关闭串口中断,以免发送指令过程中被其他事情打断
	TI = 1;

	printf("AT+RST\r\n");  //往串口发重启指令,在单片机中使用printf默认是往串口发送数据
	delayms(1200);         //适当延时,给wifi模块一点反应时间

	printf("AT+CWMODE=1\r\n");  //选择STA模式
	delayms(1200);

	printf("AT+CIPMUX=0\r\n");  //单通道模式
	delayms(1200);
	
	printf("AT+CIPSTART=\"UDP\",\"192.168.1.118\"
以下是一个简单的测试51单片机串口与esp8266发送AT指令的程序: ```c #include <reg51.h> #define FREQ_OSC 11059200UL // 单片机的晶振频率 #define BAUD_RATE 9600 // 串口波特率 #define ESP8266_BAUD_RATE 115200 // ESP8266模块的波特率 // 定义ESP8266模块的IP地址和端口号 #define SERVER_IP "192.168.1.1" #define SERVER_PORT "8080" // 声明函数 void init_serial(); void send_string(char*); void send_byte(char); void esp8266_init(); void esp8266_send_command(char*); void main() { init_serial(); // 初始化串口 // 初始化ESP8266模块 esp8266_init(); // 发送AT指令测试连接 esp8266_send_command("AT\r\n"); while (1) { // 发送数据到服务器 esp8266_send_command("AT+CIPSTART=\"TCP\",\""SERVER_IP"\","SERVER_PORT"\r\n"); esp8266_send_command("AT+CIPSEND=5\r\n"); esp8266_send_command("hello"); esp8266_send_command("\r\n"); esp8266_send_command("AT+CIPCLOSE\r\n"); } } void init_serial() { TMOD = 0x20; // 设置定时器1为8位自动重载模式 TH1 = 256 - FREQ_OSC / (32 * 12 * BAUD_RATE); // 计算波特率重载值 TL1 = TH1; // 定时器1初值等于波特率重载值 TR1 = 1; // 启动定时器1 SM0 = 0; // 设置串口为模式1(8位数据、无校验、1位停止位) SM1 = 1; REN = 1; // 允许接收数据 EA = 1; // 开启总中断 ES = 1; // 开启串口中断 } void send_string(char* str) { while (*str) { send_byte(*str++); } } void send_byte(char ch) { SBUF = ch; while (!TI); TI = 0; } void esp8266_init() { // 设置ESP8266模块的波特率 esp8266_send_command("AT+UART_DEF="ESP8266_BAUD_RATE",8,1,0,0\r\n"); // 重启ESP8266模块 esp8266_send_command("AT+RST\r\n"); // 等待ESP8266模块重启完成 delay(1000); } void esp8266_send_command(char* command) { send_string(command); delay(100); } void delay(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 125; j++); } } ``` 该程序中,我们首先定义了单片机的晶振频率和串口波特率,以及ESP8266模块的IP地址和端口号。然后,我们定义了一些函数来初始化串口、发送字符串和字节、初始化ESP8266模块以及发送AT指令。在主函数中,我们首先初始化串口和ESP8266模块,然后发送AT指令测试连接。接下来,我们进入一个无限循环,在每次循环中,发送数据到服务器,并关闭连接。最后,我们定义了一个延时函数来等待ESP8266模块重启完成。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值