【平头哥RVB2601创意应用开发】项目的杂谈
[复制链接]
本帖最后由 lugl4313820 于 2022-4-2 21:47 编辑
【感谢】这里要特别感谢@xinmeng_wit,他的贴子【新提醒】【平头哥RVB2601创意应用开发】3、wifi网络通信 - 平头哥RISC-V RVB2601活动专区 - 电子工程世界-论坛 (eeworld.com.cn),让我明白了如何写wifi接收的回调函数,与注册命令函数,再次感谢。
【杂谈】这次参加平头哥的创意活动,我愿来的设想是做一个对冷库的温度监测的管理系统,因为我的业务有很重要的一块就是对冷库和冰箱的疫苗(大家都接种过新冠疫苗吧)的温度进行管理,我进入单片机的领域也是因为要做温度监控而入的坑。当时一个温度要好几千,当时没有经费,就想着自己弄,结果5年过去了,还没有弄成。虽然成品已经做好,但是不能推广,一来这行业不是说你的产品好,价格便宜就能推出去。但是我的还是坚持想做一个更加智能的产品,即使它没出生就可能死了的东西。
最先的设想是用wifi(ESP8266)采集数据通过局域网发到服务器上,其实这个方案是通过了的,而且也免费给几个兄弟单位使用过。但是ESP8266就是电池不能解决,还有就是冰箱是铁壳,信号不稳定,特别是冷库,四面全是铁。后面为了控制功耗,我学习了stm8L,用他来定时关断ESP8266。这个也实现了,但是工作调岗的原因,我不管疫苗了,后因为温度太准了,后来管理的同志经常收到报警,所以就kill了他,这项目也就停止了。
2020年因为新冠疫情,我又重新回来疫苗管理的岗位,而且《疫苗管理法》实施,更加加强了疫苗管理要求,但是我回来时也装备了在线的疫苗温度监控系统。当然价格也是贵得吓死人,但是,现有的温度监控还只是单纯的温度监控,没有引入电源监控的管理。
我的设想是增加对电源的监控,电源的电压、电流等进行监控,在停电或者设备没有运转的情况下,及时预先的告之用户,以免温度失控才做出报警信息。
【目前遇到的困难】当时我看中这款开发板是有wifi,有屏幕,感觉我实现起来很容易。但是当我拿到开发板时想结合lVGL+WIFI就显示内存不足,然后串口也不够。跟我想象的差远了,还是我太年轻了。而且目前对于这块板子的学习资源也是少得可怜。
前些天管理员善意的提醒我要加快项目的进度,我感觉压力山大,也有放弃的想法。
但是回想还是想办法克服困难继续下去吧。
今天是放假,早上起来静下心来打开hello world开始学习原代码,同时也到平头哥学习了Yoc的基本概念==。上午理清了系统初始化等一些基本的概念。
进入正题,这里把wifi发送与接的知识记录下来:
其实原来我也明白配置连网的地址就是network_init(),我当时也写过贴子,如何连网,通过学习@xinmeng_wit的文章,我才懂得如何加入接收到数据的回调函数的地点:
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, "HUAWEI-myssid", sizeof("HUAWEI-myssid"), "mypasswd...", sizeof("mypasswd..."));//配置上网,当然这个在后面需要改正的地方,不知道有没有象esp8266一样有用手机配网的方法
w800_packet_input_cb_register(&w800_data_receive_callback);//就是这里加入接收到数据的回调函数!!!
netmgr_start(app_netmgr_hdl);
}
}
再就是在main主函数中注册的取得IP后的函数增中发送的命令:
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");
connect_tcp_server("192.168.3.192",3333);//这里在取得IP后发送一条指令
break;
case EVENT_NETMGR_NET_DISCON:
LOGD(TAG, "net disconnect");
break;
}
/*do exception process */
app_exception_event(event_id);
}
其实在后面的项目中如果要发送数据也就执行这条命令就行了。
再有就注册控制台的命令是在..\my_pro\__workspace_pack__\sal\v7.4.3\cli\cl_ping.c下增加:
int cli_reg_cmd_at(void)
{
static const struct cli_command at_cmd_info = {
"tcp_client_test",
"tcp client test",
cmd_at_client_handler,
};
aos_cli_register_command(&at_cmd_info);//注册控制台命令。
return 0;
}
//在以后的发送数据中使用这条指令
static void cmd_at_client_handler(char *wbuf, int wbuf_len, int argc, char **argv)
{
const uint8_t pdata[] = "Hello RVB2601!\r\n";
int len = sizeof(pdata);
int timeout=120;
w800_send_data(pdata, len, timeout);
}
到这里基本上就完成了tcp数据的收发,但是还有一个疑问,如何进行POST、MQTT的数据,这路还有很长呀,希望大伙指导指导我一下,拜托了!
|