由于测试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(){}