平头哥RVB2601提供了web player的demo,运行后一时还找不到http://xxx.com/abcd.mp3的资源进行评测。
居然是WEB播放器,一定是能够联网的。一直想找到平头哥联网的demo例程,没找到合适的,在查阅了平头哥网站的很多博文后,
自己也打算尝试一下联网的例程,于是,复制ch2601_webplayer_demo例程后更名为ch2601_wifitest_demo
更加平头哥网站的博文,在W800_api.c中加入了int w800_connect_srv(char *srvname, uint16_t port)函数,方便后面直接TCP联网
对原Web player中的init.c作了修改,方便联网测试
#include <stdbool.h>
#include <aos/kv.h>
#include <yoc/partition.h>
#include <yoc/init.h>
#include <drv/pin.h>
#include <yoc/at_port.h>
#include <devices/w800.h>
#include <devices/drv_snd_alkaid.h>
#include "app_main.h"
#include "board.h"
#define TAG "init"
netmgr_hdl_t app_netmgr_hdl;
extern at_channel_t spi_channel;
void w800_in(int linkid, void *data, size_t len, char remote_ip[16], uint16_t remote_ports)
{
uint8_t* d;
d=(uint8_t *)data;
printf("data:%x,%x,%x,%x,%x ... \n",d[0],d[1],d[2],d[3],d[4]);
printf("rev:%s\n",data);
}
typedef void (*net_data_input_cb_t)(int linkid, void *data, size_t len, char remote_ip[16], uint16_t remote_ports);
extern int w800_packet_input_cb_register(net_data_input_cb_t cb);
//net_data_input_cb_t cb = &w800_in;
extern int w800_module_init(utask_t *task, w800_wifi_param_t *param);
static void network_init()
{
w800_wifi_param_t w800_param;
/* init wifi driver and network */
w800_param.reset_pin = PA21;
w800_param.baud = 1*1000000;
w800_param.cs_pin = PA15;
w800_param.wakeup_pin = PA25;
w800_param.int_pin = PA22;
w800_param.channel_id = 0;
w800_param.buffer_size = 4*1024;
wifi_w800_register(NULL, &w800_param);
app_netmgr_hdl = netmgr_dev_wifi_init();
if (app_netmgr_hdl) {
utask_t *task = utask_new("netmgr", 2 * 1024, QUEUE_MSG_COUNT, AOS_DEFAULT_APP_PRI);
netmgr_service_init(task);
netmgr_config_wifi(app_netmgr_hdl, "TP-LINK_xxxx", 12, "12345678900", 11);
w800_module_init(task, &w800_param);
w800_packet_input_cb_register(&w800_in);
netmgr_start(app_netmgr_hdl);
}
}
void board_yoc_init(void)
{
board_init();
event_service_init(NULL);
console_init(CONSOLE_UART_IDX, 115200, 512);
//ulog_init();
//aos_set_log_level(AOS_LL_DEBUG);
//int ret = partition_init();
//if (ret <= 0) {
// LOGE(TAG, "partition init failed");
//} else {
// LOGI(TAG, "find %d partitions", ret);
//}
aos_kv_init("kv");
//snd_card_alkaid_register(NULL);
network_init();
board_cli_init();
}
w800_in是回调函数,只是简单地打印接收的数据。
netmgr_config_wifi配置WiFi的ssid和pswd。
main主函数中,也做了些修改
/*
* Copyright (C) 2019-2020 Alibaba Group Holding Limited
*/
#include <stdlib.h>
#include <string.h>
#include <aos/list.h>
#include <aos/debug.h>
#include <uservice/uservice.h>
#include <uservice/eventid.h>
#include <yoc/sysinfo.h>
#include <board.h>
#include "player_demo.h"
#include "app_main.h"
#define TAG "APP"
extern int w800_software_reset(void);
extern int w800_ap_info(char ssid[32], int bssid[6], int *channel, int *rssi);
extern int w800_get_status(int *stat);
extern int w800_connect_srv(char *srvname, uint16_t port);
extern int w800_send_data(const uint8_t *pdata, int len,int timeout);
static void cmd_at_client_handler(void);
static void network_event(uint32_t event_id, const void *param, void *context)
{
switch(event_id) {
case EVENT_NETMGR_GOT_IP:
LOGD(TAG, "net got ip");
break;
case EVENT_NETMGR_NET_DISCON:
LOGD(TAG, "net disconnect");
break;
}
/*do exception process */
app_exception_event(event_id);
}
#include <aos/cli.h>
int cli_reg_cmd_at(void)
{
static const struct cli_command at_cmd_info = {
"attest",
"at client test",
cmd_at_client_handler,
};
aos_cli_register_command(&at_cmd_info);
return 0;
}
static void cmd_at_client_handler(void)
{
const uint8_t pdata[]="{\"M\":\"checkin\",\"ID\":\"25923\",\"K\":\"df02bd2ef\"}\n";
char ssid[32];
int bssid[6];
int channel;
int rssi;
int status = 0;
while(status != 2) {
w800_ap_info( ssid, bssid , &channel, &rssi);
printf("ssid: %s\r\n", ssid);
printf("channel: %d\r\n", channel);
printf("rssi: %d\r\n", rssi);
w800_get_status( &status); //[ 16.360]<D>w800_api link status 2 已获取到ip
printf("w800_get_status: %d\r\n", status);
aos_msleep(2000);
}
char *srvname="www.bigiot.net";
uint16_t port = 8181;
status = w800_connect_srv(srvname, port);
printf("w800_connect_srv: %d\r\n", status);
int len;
len=strlen(pdata);
int timeout=120;
status = w800_send_data(pdata, len, timeout);
printf("w800_send_data: %d\r\n", status);
}
static void iot_time(void)
{
const uint8_t pdata[]="{\"M\":\"time\",\"F\":\"Y-m-d-w H:i:s\"}\n";
int len;
len=strlen(pdata);
int timeout=120;
w800_send_data(pdata, len, timeout);
}
int main(void)
{
//int *stu;
board_yoc_init();
//player_init();
netmgr_dev_wifi_init();
//cli_reg_cmd_player();
cli_reg_cmd_at();
/* Subscribe */
event_subscribe(EVENT_NETMGR_GOT_IP, network_event, NULL);
event_subscribe(EVENT_NETMGR_NET_DISCON, network_event, NULL);
aos_msleep(10000);
cmd_at_client_handler();
while(1)
{
aos_msleep(10000);
//w800_get_status();
//w800_iot_status();
iot_time();
}
}
用的前面大佬提供的方法,www.bigiot.net网站中提供了一些功能,感觉测试还是蛮好的,想要获取时间,得先注册用户,然后注册设备,操作倒比较简便。
开发板J4的排针,1,2是CPU这边的串口,用于printf函数的输出
3、4脚连接的USB,5、6脚是W800这边的输出。
如需要看到所有的数据,最好再单多接一个串口TTL模块,显示数据
可以看到,通过WiFi能正常联网,并发送和获取信息,代码中实现了每10秒更新一次时间的功能。
两边的串口,都可以输入help,功能还是有较大的差异的
CDK的组件cli应该是一个可以交互的调试件,功能应该也是蛮强大的,后面好好学习一下。
就不知道平头哥有没有单独介绍使用各个模块的贴子,我想把LVGL跟联网结合到一块,一结合就不成功。
代码行号:50和51,"w800_module_init"和“w800_packet_input_cb_register”是不是不需要调用,因为“wifi_w800_register”里面已经调用这两个API了
引用: lugl4313820 发表于 2022-3-22 11:18 就不知道平头哥有没有单独介绍使用各个模块的贴子,我想把LVGL跟联网结合到一块,一结合就不成功。
还没测试LVGL,到时来取取经哈
引用: 小默叔叔 发表于 2022-3-23 09:49 代码行号:50和51,"w800_module_init"和“w800_packet_input_cb_register”是不是不需要调 ...
w800_module_init是可以重复的,有个注册成功的标注,如果已经注册就直接返回了。w800_packet_input_cb_register这个的目的是为了调试,接收到哪些信息。