ESP8266 non_os dns解析

版权声明:本文为博主(SimonLiu)原创文章,未经博主允许不得转载。 https://blog.csdn.net/toopoo/article/details/88598677

由于测试AliOS Things的时候出现了服务器无法解析的问题,所以就用ESP8266 non_os SDK快速写了一个dns解析的程序,用来排除网络环境和模块自身的问题。废话少说,直接上代码。

#include "driver/uart.h"
#include "user_main.h"
#include "espconn.h"

ip_addr_t esp_server_ip;
struct espconn userespconn;

void  user_esp_platform_dns_found(const char *name, ip_addr_t *ipaddr, void *arg)
{
struct espconn *pespconn = (struct espconn *)arg;
if (ipaddr != NULL)
os_printf("\n\ruser_esp_platform_dns_found:%d.%d.%d.%d\n\r",
*((uint8 *)&ipaddr->addr), *((uint8 *)&ipaddr->addr + 1),
*((uint8 *)&ipaddr->addr + 2), *((uint8 *)&ipaddr->addr + 3));
}

void dns_client(void) {
espconn_gethostbyname(&userespconn,"www.baidu.com", &esp_server_ip,
user_esp_platform_dns_found);
}

void ICACHE_FLASH_ATTR Wifi_conned(void *arg){
static uint8 count=0;
uint8 status;
os_timer_disarm(&connect_timer);
count++;
status=wifi_station_get_connect_status();
if(status==STATION_GOT_IP){
os_printf("Wifi connect success!");
dns_client();
return;
}else{
if(count>=7){
os_printf("Wifi connect fail!");
return;
}
}



os_timer_arm(&connect_timer,2000,NULL);
}
void ICACHE_FLASH_ATTR scan_done(void *arg,STATUS status){
	uint8 ssid[33];
	struct station_config stationConf;

	  if (status == OK)
	  {
	    struct bss_info *bss_link = (struct bss_info *)arg;
	    bss_link = bss_link->next.stqe_next;//ignore first

	    while (bss_link != NULL)
	    {
	      os_memset(ssid, 0, 33);
	      if (os_strlen(bss_link->ssid) <= 32)
	      {
	        os_memcpy(ssid, bss_link->ssid, os_strlen(bss_link->ssid));
	      }
	      else
	      {
	        os_memcpy(ssid, bss_link->ssid, 32);
	      }
	      os_printf("+CWLAP:(%d,\"%s\",%d,\""MACSTR"\",%d)\r\n",
	                 bss_link->authmode, ssid, bss_link->rssi,
	                 MAC2STR(bss_link->bssid),bss_link->channel);

	      bss_link = bss_link->next.stqe_next;
	    }
	    os_memcpy(&stationConf.ssid, "mywifi", 32);//WIFI ssid
	    os_memcpy(&stationConf.password, "mypassword", 64);//WIFI密码
	    wifi_station_set_config_current(&stationConf);
	    wifi_station_connect();
	    os_timer_setfn(&connect_timer,Wifi_conned,NULL);
	    os_timer_arm(&connect_timer,2000,NULL);
	  }
	  else
	  {
	//  	os_sprintf(temp,"err, scan status %d\r\n", status);
	//  	uart0_sendStr(temp);

	  }

}



void to_scan(void) { wifi_station_scan(NULL,scan_done); }
void user_init(){
uart_init(115200,115200);
UART_SetPrintPort(1);
//初始化ap
wifi_set_opmode(0x01);
system_init_done_cb(to_scan);

}
void user_rf_pre_init(){}

猜你喜欢

转载自blog.csdn.net/toopoo/article/details/88598677
今日推荐