目录
一、引脚说明:
二、相关AT指令
1、测试指令:发送:AT
2 、重启模块:发送:AT+RST
3、设置模块工作模式 1 :STA 模式 2 :AP 模式 3 :STA 和 和 AP 模式为 例:设置模块为 STA 和 和 STA模式发送:AT+CWMODE=1
4、让模块列出当前环境下存在无线路由器的列表 发送:AT+CWLAP
编辑
5、让模块连上自己的路由器发送:AT+CWJAP="www.zniot.com","littlebee" (其中 littlebee 为密码)
6、检测是否真连上了 发送:AT+CWJAP?
7、启动模块单连接:发送:AT+CIPMUX=0
8、连上我们远程 TCP 服务器X1.X2.X3.X4 为 IP 地址 9999 为端口发送: AT+CIPSTART="TCP"," X1.X2.X3.X4",9999
9、模块发数据到服务器 发送:AT+CIPSEND=4,15(注意:15 为自己设定的发送数据长度,>=15 才发送 否则累加满15 再发送,大于 15 则截取前面的数据)
10、开启模块本地的 TCP 服务器(其中 1 为开启 如果设为 0 则关闭 8888:要监听端口)※发送: AT+CIPSERVER=1,8888结果:
编辑查一下模块 IP 地址:※ 发送: AT+CIFSR=?※ 结果
编辑连接上试试:
三、stm32f103连接服务器代码
1 、重启模块:
发送:AT+RST
一、引脚说明:
VCC:电源正极,接3.3-5V
GND:电源负极
TXD:数据发送引脚
RXD:数据接收引脚
RST:复位引脚(低电平有效)
I0-0:固件烧写模式,低电平烧写,高电平运行
二、相关AT指令
1、测试指令:发送:AT
2 、重启模块:发送:AT+RST
3、设置模块工作模式 1 :STA 模式 2 :AP 模式 3 :STA 和 和 AP 模式
为 例:设置模块为 STA 和 和 STA模式
发送:AT+CWMODE=1
4、让模块列出当前环境下存在无线路由器的列表 发送:AT+CWLAP
5、让模块连上自己的路由器
发送:AT+CWJAP="www.zniot.com","littlebee" (其中 littlebee 为密码)
6、检测是否真连上了 发送:AT+CWJAP?
7、启动模块单连接:发送:AT+CIPMUX=0
8、连上我们远程 TCP 服务器X1.X2.X3.X4 为 IP 地址 9999 为端口
发送: AT+CIPSTART="TCP"," X1.X2.X3.X4",9999
9、模块发数据到服务器 发送:AT+CIPSEND=4,15(注意:15 为自己设定的发送数据长度,>=15 才发送 否则累加满15 再发送,大于 15 则截取前面的数据)
10、开启模块本地的 TCP 服务器
(其中 1 为开启 如果设为 0 则关闭 8888:要监听端口)
※发送: AT+CIPSERVER=1,8888
结果:
查一下模块 IP 地址:
※ 发送: AT+CIFSR=?
※ 结果
连接上试试:
三、stm32f103连接服务器代码
#include "./BSP/ESP8266/esp8266.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/TIME/time.h"
#include "string.h"
#include "FreeRTOS.h"
#include "task.h"
#include "semphr.h"
#include "./BSP/TIME/time.h"
uint8_t AT_CMD[]="AT\r\n";//测试
uint8_t AT_REST[]="AT+RST\r\n";//复位
uint8_t AT_CWAUTOCONN[]="AT+CWAUTOCONN=0\r\n";//关闭自动连接
uint8_t AT_WIFI_CONNECT[]="AT+CWJAP_DEF=\"TP-LINK_226\",\"226226226\"\r\n";//连接wifi
uint8_t AT_CIPMUX[]="AT+CIPMUX=0\r\n";//配置单路连接
uint8_t AT_CWMODE[]="AT+CWMODE=1\r\n";//设置sta模式
//服务器iot.100ask.net
uint8_t AT_TCP_CONNECT[]="AT+CIPSTART=\"TCP\",\"47.114.187.247\",1883\r\n";//TCP连接
uint8_t AT_CIPMODE[]="AT+CIPMODE=1\r\n";//打开透传
uint8_t AT_CIPSEND[]="AT+CIPSEND\r\n";//开始透传
uint8_t AT_EXIT[]="+++";//断开透传
uint8_t AT_CIPCLOSE[]="AT+CIPCLOSE\r\n";//关闭tcp连接
uint8_t open_send_flag=0;//透传打开标志
uint8_t wifi_success=0;//TCP连接标志
//判断是否回应ok 1:OK,0:失败
uint8_t esp8266_ack_ok(uint16_t time_out)
{
uint8_t temp=0;
uint8_t buf[4];
uint16_t now_time=time6_over;
while(1)
{
if(!is_rt_buf_empty())
{
temp=get_rt_buf();
if(temp=='O')//判断是否为OK
{
delay_ms(10);
temp=get_rt_buf();
if(temp=='K')
{
printf("OK\r\n");
delay_ms(time_out);
r_flag=w_flag;
return 0;
}
}
if(temp=='E')
{
delay_ms(10);
for(int i=0;i<4;i++)
{
buf[i]=get_rt_buf();
}
//printf("buf=%s#\r\n",buf);
if(buf[0]=='R'&&buf[1]=='R'&&buf[2]=='O'&&buf[3]=='R')
{
//printf("buf=%s\r\n",buf);
printf("ERROR\r\n");
delay_ms(10);
r_flag=w_flag;
return 1;
}
}
//printf("%c",temp);
}
if(time6_over-10>(now_time))
{
printf("TIME OVER\r\n");
break;
}
}
return 1;
}
void esp01s_read(void)
{
uint8_t temp=0;
while(!is_rt_buf_empty())//判断缓冲区是否有数据
{
temp=get_rt_buf();
printf("%c",temp);
}
}
//wifi配置 1:失败,0:成功
uint8_t wifi_config(void)//mode:0:任务外,1:任务内
{
//复位
HAL_UART_Transmit(&g_uart3_handle,AT_REST,strlen((char *)AT_REST),1000);
printf("reset:");
if(esp8266_ack_ok(1000))
return 1;
else
{
wifi_success=0;
open_send_flag=0;
}
//设置sta模式
HAL_UART_Transmit(&g_uart3_handle,AT_CWMODE,strlen((char *)AT_CWMODE),1000);
printf("set sta mode:");
if(esp8266_ack_ok(10))
return 1;
//连接wifi
HAL_UART_Transmit(&g_uart3_handle,AT_WIFI_CONNECT,strlen((char *)AT_WIFI_CONNECT),1000);
printf("connect wifi:");
if(esp8266_ack_ok(10))
return 1;
//设置单路连接
HAL_UART_Transmit(&g_uart3_handle,AT_CIPMUX,strlen((char *)AT_CIPMUX),1000);
printf("set Single-way connect:");
if(esp8266_ack_ok(10))
return 1;
//打开透传
HAL_UART_Transmit(&g_uart3_handle,AT_CIPMODE,strlen((char *)AT_CIPMODE),1000);
printf("open Transparent transmission mode:");
if(esp8266_ack_ok(10))
return 1;
//连接TCP
HAL_UART_Transmit(&g_uart3_handle,AT_TCP_CONNECT,strlen((char *)AT_TCP_CONNECT),1000);
printf("connect TCP:");
if(esp8266_ack_ok(10))
return 1;
else
wifi_success=1;
return 0;
}
//开始透传
uint8_t wifi_open_cipsend(void)
{
//wifi已近连接
if(wifi_success && open_send_flag!=1)
{
//开始透传
HAL_UART_Transmit(&g_uart3_handle,AT_CIPSEND,strlen((char *)AT_CIPSEND),500);
printf("start Transparent transmission:");
if(!esp8266_ack_ok(10))
open_send_flag=1;
else
return 1;
return 0;
}
return 1;
}
//关闭透传
void wifi_close_cipsend(void)
{
if(wifi_success && open_send_flag==1)
{
//关闭透传
HAL_UART_Transmit(&g_uart3_handle,AT_EXIT,strlen((char *)AT_EXIT),500);
printf("clsoe Transparent transmission:");
delay_ms(100);
HAL_UART_Transmit(&g_uart3_handle,AT_CMD,strlen((char *)AT_CMD),500);
if(!esp8266_ack_ok(10))
open_send_flag=0;
}
else
printf("Transparent transmission not open,no need close\r\n");
}
//关闭连接,返回0成功,1失败
uint8_t wifi_close_connect(void)
{
taskENTER_CRITICAL();/* 进入临界区 */
delay_ms(100);
//关闭透传
wifi_close_cipsend();
//关闭连接
HAL_UART_Transmit(&g_uart3_handle,AT_CIPCLOSE,strlen((char *)AT_CIPCLOSE),1000);
printf("close TCP connect:");
if(!esp8266_ack_ok(10))
{
open_send_flag=0;
wifi_success=0;
}
else
{
taskEXIT_CRITICAL(); /* 退出临界区 */
return 1;
}
taskEXIT_CRITICAL(); /* 退出临界区 */
return 0;
}
//复位后关闭
//关闭连接,返回0成功,1失败
uint8_t wifi_reclose_connect(void)
{
//关闭透传
HAL_UART_Transmit(&g_uart3_handle,AT_EXIT,strlen((char *)AT_EXIT),500);
printf("close Transparent transmission,disconnect:");
delay_ms(100);
HAL_UART_Transmit(&g_uart3_handle,AT_CIPCLOSE,strlen((char *)AT_CIPCLOSE),1000);
delay_ms(300);
open_send_flag=0;
wifi_success=0;
esp01s_read();
return 0;
}
extern SemaphoreHandle_t wifi_xsemaphor_handle;
int wifi_write(uint8_t *buf,int len)
{
if(wifi_success && open_send_flag==1)
{
xSemaphoreTake(wifi_xsemaphor_handle,portMAX_DELAY);//加互斥锁,portMAX_DELAY等待
HAL_UART_Transmit(&g_uart3_handle,buf,len,100);//发送数据
xSemaphoreGive(wifi_xsemaphor_handle);//解互斥锁
return 0;
}
else
printf("send error,no connect or no open Transparent transmission\r\n");
return 1;
}
int wifi_read_byte(uint8_t *c,uint16_t timeout)
{
uint8_t temp;
uint16_t now_time=time6_over;
if(wifi_success && open_send_flag==1)
{
while(1)
{
if(!is_rt_buf_empty())//环形缓冲区不为空
{
temp=get_rt_buf();//获取一个字节
*c=temp;
return 0;
}
if((time6_over-now_time)>timeout)
return 1;//超时
}
}
else
printf("read error,no connect or no open Transparent transmission\r\n");
return 1;
}