一、ESP8266实物图(01s)
ESP8266 尺寸为5x5 mm,ESP8266 模组需要的外围器件有:10个电阻电容电感、1个无源晶振、1个flash。工作温度范围:-40~125℃。ESP8266 是一个完整且自成体系的 WiFi 网络解决方案,能够独立运行,也可以作为 slave 搭载于其他 Host 运行。
ESP8266 在搭载应用并作为设备中唯一的应用处理器时,能够直接从外接闪存中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需求。另外一种情况是,无线上网接入承担 WiFi 适配器的任务时,可以将其添加到任何基于微控制器的设计中,连接简单易行,只需通过 SPI/SDIO 接口或中央处理器 AHB 桥接口即可。ESP8266 强大的片上处理和存储能力,使其可通过 GPIO 口集成传感器及其他应用的特定设备,实现了最低前期的开发和运行中最少地占用系统资源。
二、ESP8266接线图
只接4根线即可进行使用。
三、WiFi配置模式
AP模式
AP是 Access Point的简称,提供无线接入服务,提供数据访问,允许其它无线终端接入,简单来说就是和路由器在多数情况下的工作模式相同,能让手机接入。在ESP8266中这种模式主要用于动态修改接入点信息。
一些用ESP8266制作的WIFI广告播放器就是工作在这种模式下的。
STA模式
STA是Station的简称,类似于无线终端,STA本身并不接受无线的接入,它可以连接到AP,简单来说就是和手机连接WIFI热点的工作状态相同,可以连接其它的热点。
ESP8266工作在STA模式下有一下几个特点,开发的时候需要记住:
1. 在连接丢失的情况下,一旦WiFi再次可用,ESP8266将自动重新连接到接入点(热点)。
2. 模块重启后ESP8266将使用最后一次保存到Flash存储器中的接入点认证信息(ssid,password是加密保存)连接到接入点。
3. 如果仅仅是修改了和WIFI模式不相干的代码,ESP8266仍然使用保存到Flash存储器上的认证信息。
AP混合STA模式
了解了前两个概念,AP混合STA模式就不难理解了,就是既可以连接到其它的WIFI热点,也可以让别的无线终端连接,这两个过程能同时进行。
四、AT指令
STA模式(配置为客户端)
(1) 测试模块
指令:AT
响应:OK
(2) 设置模块
指令:AT+CWMODE=< mode>
响应:OK
说明:< mode>:1-Station模式,2-AP模式,3-AP兼Station模式
(3) 加入当前无线网络
指令:AT+ CWJAP=”MERSAIN”,”XXXXXXXX”(设置指令)
响应:OK
(4)开启多连接模式
指令:AT+CIPMUX=< mode >
响应:OK
说明:< mode >:0-单路连接模式,1-多路连接模式
(5)建立 TCP 连接
指令: AT+CIPSTART=2,“TCP”,“192.168.1.109”,8080 (设置指令)
响应: OK/ ERROR
(4)向服务器发送数据
指令: AT+CIPSEND=2,10(设置指令) (通过上一条指令 AT+CIPSTART 设置为 ID=2)
响应:SEND OK
1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=< length >
2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND= < id >,< length >
五、代码
main.c
printf ( "\r\n ESP8266 ......\r\n" );
ESP8266_AT_Test ();
ESP8266_Net_Mode_Choose ( STA );//STA工作模式
while ( ! ESP8266_JoinAP ( macUser_ESP8266_ApSsid, macUser_ESP8266_ApPwd ) ); //加入当前无线网络
ESP8266_Enable_MultipleId ( DISABLE);//开启多连接
while ( ! ESP8266_Link_Server ( enumTCP, macUser_ESP8266_TcpServer_IP, macUser_ESP8266_TcpServer_Port, Single_ID_0 ) );//连接服务器
Delay_ms(1000);
while ( ! ESP8266_UnvarnishSend () ); //透传模式
printf ( "\r\n end\r\n" );
........
........
while(1)
{
DHT11_Read_Data(&temp,&humi);//
AD_value = ADC_ConvertedValue;
val=AD_value/200;
vall=val*4;
printf("temp %d℃,humi %d%RH,hei %dmm\r\n",temp,humi, vall);
sprintf ( cStr,"temp %d℃,humi %d%RH,hei %dmm\r\n",temp,humi, vall);
ESP8266_SendString ( ENABLE, cStr, 0, Single_ID_0 );
Delay_ms(1000);
}
esp8266.c
#include "bsp_esp8266.h"
#include "common.h"
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include "delay.h"
static void ESP8266_USART_Config ( void );
static void ESP8266_USART_NVIC_Configuration ( void );
struct STRUCT_USARTx_Fram strEsp8266_Fram_Record = {
0 };
/**
* @brief ESP8266初始化函数
* @param 无
* @retval 无
*/
void ESP8266_Init ( void )
{
ESP8266_USART_Config ();
}
/**
* @brief 初始化ESP8266用到的 USART
* @param 无
* @retval 无
*/
static void ESP8266_USART_Config ( void )
{
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* config USART clock */
macESP8266_USART_APBxClock_FUN ( macESP8266_USART_CLK, ENABLE );
macESP8266_USART_GPIO_APBxClock_FUN ( macESP8266_USART_GPIO_CLK, ENABLE );
/* USART GPIO config */
/* Configure USART Tx as alternate function push-pull */
GPIO_InitStructure.GPIO_Pin = macESP8266_USART_TX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(macESP8266_USART_TX_PORT, &GPIO_InitStructure);
/* Configure USART Rx as input floating */
GPIO_InitStructure.GPIO_Pin = macESP8266_USART_RX_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(macESP8266_USART_RX_PORT, &GPIO_InitStructure);
/* USART1 mode config */
USART_InitStructure.USART_BaudRate = macESP8266_USART_BAUD_RATE;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStru