[IoT自製玩具][Ameba Z2][Note 3] 手机控制LED(1)- 开机自动连wifi上网

既然要做IOT玩具,当然要能上网,然后用手机控制玩具~
接下来的Note 3和Note 4,来试着用手机控制LED灯。
http://img2.58codes.com/2024/emoticon50.gif

*题外话: 如果是用Arduino的话,就可以用美美的Blynk APP了,且号称5分钟可透过手机控制板子LED。Amebaz2似乎也有Arduino SDK,但我没有装过。目前不装Arduino,先用最古老的方法...

1. 开机自动连wifi上网

要是每一次开机都要手动设定wifi上网,就太麻烦了,所以要把wifi资讯存进firmware里。
首先开启这个档案 component/common/example/wlan_fast_connect/example_wlan_fast_connect.c
找到以下function(此function在boot的过程中会执行到,所以直接改这边最快)。

int wlan_init_done_callback(void){// ...// 中间略// ...     data = (struct wlan_fast_reconnect *)malloc(sizeof(struct wlan_fast_reconnect));     if(data){         device_mutex_lock(RT_DEV_LOCK_FLASH);         // wlan fast reconnect资讯是存在FAST_RECONNECT_DATA里面,而这个变数是一块在flash offset(0x200000 - 0x1000)的空间         flash_stream_read(&flash, FAST_RECONNECT_DATA, sizeof(struct wlan_fast_reconnect), (uint8_t *)data);                              device_mutex_unlock(RT_DEV_LOCK_FLASH);

正常情况下,FAST_RECONNECT_DATA里面是没有东西的,所以正解就是,在build firmware时先做一个struct wlan_fast_reconnect物件,把它一起包进firmware binary中。烧完firmware重开机之后,物件就会存在flash中了。
但这个方法有点麻烦,必须要去trace build firmware的code,有点懒惰.......
所以决定先用一个偷吃步就好(看看就好不要学,可能会有不预期的bug)。

// 一样在wlan_init_done_callback(void)这个function// 既然data物件读出来是空的,那我只好塞值给他了,而且只塞必要的值    printf("[HANA] set config - wlan fast connect - start\n");        // 家里AP的SSID    strcpy(data->psk_essid, "HANA_HOME_WIFI");        // 家里AP的密码(直接明码很危险,不过先这样)    strcpy(data->psk_passphrase, "12345678");        // 参考家里AP的加密方法    data->security_type = RTW_SECURITY_WPA2_AES_PSK;        // 先建立一个全域变数static u8 pscan_channel_list[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14};    // 代表要扫描所有的channel    data->channel = &pscan_channel_list;      printf("[HANA] set config - wlan fast connect - end\n");// 因为我们只有指定data物件一部分的值而已,其他没用到的地方需要注解掉,以免crash,例如// offer_ip = data->offer_ip;// wifi_connect()是连接wifi上网的主要function,所以只要把wifi物件搞定就好// 而wifi物件又是从data来的,所以改data物件是可行的    ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len,    wifi.password_len, wifi.key_id, NULL);

烧完firmware重开机,就会看到UART log印出以下文字,代表要到IP啰!!!

Interface 0 IP address : 192.168.1.105  

http://img2.58codes.com/2024/emoticon12.gif


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章