分享

ESP8266 入门-NONSDK-LED-UDP

 风雲再现 2017-01-22

论坛:http://bbs./forum.php

官方网站:http://www./en/support/download/documents

ESP8266 SDK 编程入门

http://blog.csdn.net/jackhuang2015/article/details/50850204

 

ESP8266 个人资料网站:链接:http://pan.baidu.com/s/1nv0jeSp 密码:m7ff

 

一.            硬件

 

ESP8266EX 开发板

 

 

模组方案:

 

 

 

 

 

 

二.            软件

 

1.烧录软件(ESP_DOWNLOAD_TOOL_V2.4.exe

注意烧写地址和文件

烧写方法如下,先按住FLASH不放,再按一下RST键,测试版既可以就如UART烧写状态,然后按下软件START进行烧写,如果烧写不进去可先按住软件的START再重复上述动作,多试几次。

 

 

 

 

2.串口调试工具(sscom42.exe

 

3.网络调试助手(NetAssist.exe

 

2.SDK编译环境(本人用Non-OS SDK

RTOS SDK  Non-OS SDK 有何区别?

 主要差异点如下:

Non-OS SDK 

Non-OS SDK 主要使用定时器和回调函数的方式实现各个功能事件的嵌套,达到特定条件下触发特定功能函数的目的。Non-OS SDK 使用 espconn 接口实现网络操作,用户需要按 照 espconn 接口的使用规则进行软件开发。

RTOS SDK

1. RTOS 版本 SDK 使用 freeRTOS 系统,引入 OS 多任务处理的机制,用户可以使用 freeRTOS 的标准接口实 现资源管理、循环操作、任务内延时、任 务间信息传递和同步等面向任务流程的设计方式。具体接口使用方法参考 freeRTOS 官方网站的使用说明或者 USING THE FREERTOS REAL TIME KERNEL--A Practical Guide 介绍。

2. RTOS 版本 SDK 的网络操作接口是标准 lwIP API,同时提供了 BSD Socket APIsocket 接口的封装实现,用户可以直接按照socket API的使用方式来开发软件应用,也可以直接编译运行其他平台的标准 Socket 应用,有效降低平台切换的学习成本。

3. RTOS 版本 SDK 引入了 cJSON 库,使用该库函数可以更加方便的实现对 JSON 数据包的解析。

4. RTOS 版本兼容non-OS SDK中的Wi-Fi接 口、smart config接口、Sniffer相关接口、系统接口、定时器接 口、FOTA接口和外围驱动接口,不支持AT实现。

 

 

二次开发软件

三.参考文件

 

四.            基本程序解析

1.输出控制

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2

GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);//GPIO2设置为低电平

2.输入采集

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2

if(GPIO_INPUT_GET(GPIO_ID_PIN(12))==0)

{     

}

3.定时器

(放在主程序里)

os_timer_disarm(&timer);//关闭定时器,相当于计时器的计数

os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);//初始化定时器

os_timer_arm(&timer,1000,1);//开始定时器,1000毫秒后,回调前面的callback函数(后面的0表示只运行为一次 1表示循环运行)

 

(应该放在主程序前)

void timer_callback()//回调的函数

 

{

  

}

4.设置WiFi模式

(参考2C-ESP8266__SDK__Programming Guide__CN_v1.5.pdf或者2C-Espressif IoT SDK 编程手册_v0.9.1.pdf)

(放在主程序里)

wifi_set_opmode(0x02);// 设置WiFi模式为AP

 

5.设置wifi的名称和密码

(应该放在主程序前)

void ICACHE_FLASH_ATTR

user_set_softap_config(void)//设置wifi的名称和密码

{

struct softap_config config;

os_memset(config.ssid,0, 32);

os_memset(config.password,0, 64);

os_memcpy(config.ssid,"ESPESP22", 9);//SSID账号

os_memcpy(config.password,"99999999", 8);//密码

config.authmode=AUTH_WPA_WPA2_PSK;

config.ssid_len=0;

config.max_connection=5;//允许接入点数量

 

wifi_softap_set_config(&config);//设置 WiFi soft-AP ?配置,并保存到 flash

}

 

 

6.UDP数据接收与发送

(应该放在主程序前  定义结构体用于UDP数据接收与发送

struct espconn PhoneConn;//定义结构体

esp_udp PhoneConnUdp;

(放在主程序里)

PhoneConn.type=ESPCONN_UDP;

PhoneConn.proto.udp=&PhoneConnUdp;

PhoneConn.proto.udp->local_port=9999;//本地端口

PhoneConn.proto.udp->local_port=9999;//远程端口

 

PhoneConn.proto.udp->remote_ip[0]=255;//指定远程IP地址

PhoneConn.proto.udp->remote_ip[1]=255;

PhoneConn.proto.udp->remote_ip[2]=255;

PhoneConn.proto.udp->remote_ip[3]=255;

 

PhoneConn.proto.udp->remote_ip[0]=255; //指定本地IP地址

PhoneConn.proto.udp->remote_ip[1]=255;

PhoneConn.proto.udp->remote_ip[2]=255;

PhoneConn.proto.udp->remote_ip[3]=255;

 

espconn_regist_recvcb(&PhoneConn,udpclient_recv);//注册一个UDP数据包接收回调

espconn_create(&PhoneConn);//建立UDP回调

 

(应该放在主程序前 回调的函数udpclient_recv 用于判断接收到的数据)

void ICACHE_FLASH_ATTR

udpclient_recv(void *arg,char *pdata, unsigned short len)

{

    if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='0')

   {

        }

 

}

 

(用于发送数据)

espconn_sent(&PhoneConn,"LED打开!",9);

 

 

 

 

五.            例程

 

#include "os_type.h"

//#include "driver/gpio16.h"

#include "gpio.h"

//#include "driver/uar.h"//串口外设驱动库

#include "user_interface.h"

#include "spi_flash.h"

#include "espconn.h"

#include "user_config.h"

#include "smartconfig.h"

 

 

#include "ets_sys.h"

#include "osapi.h"

 

 

struct espconn PhoneConn;//定义结构体

esp_udp PhoneConnUdp;

 

void ICACHE_FLASH_ATTR

udpclient_recv(void *arg,char *pdata, unsigned short len)

{

    if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='0')

   {

       GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);

       //espconn_sent(&PhoneConn,"打开LED成功!" ,13);//接收数据

        }

 

        if (pdata[0]=='L'&&pdata[1]=='E'&&pdata[2]=='D'&&pdata[3]=='1')

          {

              GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);

          }

 

if(GPIO_INPUT_GET(GPIO_ID_PIN(12))==0)

{

       espconn_sent(&PhoneConn,"LED打开!",9);

}

else

       {

       espconn_sent(&PhoneConn,"LED关闭!",9);

       }

 

}

 

 

 

 

LOCAL os_timer_t timer;//定义结构体用于定时器

 

void ICACHE_FLASH_ATTR

user_set_softap_config(void)//设置wifi的名称和密码

{

struct softap_config config;

os_memset(config.ssid,0, 32);

os_memset(config.password,0, 64);

os_memcpy(config.ssid,"ESPESP22", 9);//SSID账号

os_memcpy(config.password,"99999999", 8);//密码

config.authmode=AUTH_WPA_WPA2_PSK;

config.ssid_len=0;

config.max_connection=5;//允许接入点数量

 

wifi_softap_set_config(&config);//设置 WiFi soft-AP ?配置,并保存到 flash

}

 

 

 

 

char zt = 1;

 

void timer_callback()//回调的函数

 

{

    if(zt == 1){

        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);//GPIO2设置为低电平

        zt = 0;

    }else{

        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);//GPIO2设置为低电平

        zt =1;

    }

}

 

void user_init(void)

{

       wifi_set_opmode(0x02);//设置WiFi模式为AP

       user_set_softap_config();

 

       PhoneConn.type=ESPCONN_UDP;

       PhoneConn.proto.udp=&PhoneConnUdp;

       PhoneConn.proto.udp->local_port=9999;//本地端口

       PhoneConn.proto.udp->local_port=9999;//远程端口

       PhoneConn.proto.udp->remote_ip[0]=255;//指定IP地址

       PhoneConn.proto.udp->remote_ip[1]=255;

       PhoneConn.proto.udp->remote_ip[2]=255;

       PhoneConn.proto.udp->remote_ip[3]=255;

 

       PhoneConn.proto.udp->remote_ip[0]=255;

       PhoneConn.proto.udp->remote_ip[1]=255;

       PhoneConn.proto.udp->remote_ip[2]=255;

       PhoneConn.proto.udp->remote_ip[3]=255;

 

       espconn_regist_recvcb(&PhoneConn,udpclient_recv);//注册一个UDP数据包接收回调

       espconn_create(&PhoneConn);//建立UDP回调

 

 

 

 

     //os_printf("SDK version:%s\n", system_get_sdk_version());

     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12);//初始化GPIO2

     PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO15);//初始化GPIO2

 

 

     os_timer_disarm(&timer);//关闭定时器,相当于计时器的计数

     os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);//初始化定时器

     os_timer_arm(&timer,5000,1);//开始定时器,1000毫秒后,回调前面的callback函数(后面的0表示只运行为一次 1表示循环运行)

 

 

}

 

void user_rf_pre_init(){}

六.            安卓APP编译

软件E4A(易安卓(有免费版))

1.主界面

2.代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多