[uCOS/RTOS] 【RT_Thread作品修】智能监控(半成品)

[复制链接]
 楼主| luoorshi 发表于 2020-6-30 13:28 | 显示全部楼层 |阅读模式
本帖最后由 luoorshi 于 2020-6-30 13:28 编辑

作者:落拾
一、概述
本次作品采用官方提供的麻雀一号开发板,具体就不介绍该开发板的具体内容了。说说该开发板的硬件匹配吧:
摄像头:作为视频监控
显示屏:可以作为设置时使用的监视屏(不使用时可以睡眠lcd_enter_sleep)、视频对话(暂时还未实现)。
MIC:音频采集、视频对话(暂时还未实现)
喇叭:可以实现报警,视频对话(暂时还未实现)
TF卡:作为视频暂存
二、RT_Thread使用情况
说实话作为一个刚刚使用嵌入式系统  还没有转变过来思维的人   我也不知道使用了那些。带后续仔细了解后更新吧。

三、硬件框架
主要硬件为麻雀一号

四、软件框架
该软件主要基于官方源码修改以下内容
1、在bk7221u_release\components\player\example\cmd\cmd_player.c内添加代码播放固定音源
2、将bk7221u_release\test\show_photo_test.c内的代码添加将图片发送到网络
3、在bk7221u_release\drivers\wlan\drv_wlan.c内添加新函数,通过线程调用读取flash内的wifi的ssid  和password
后续需要添加
1、将mic采集的音频参数发送到网络
2、修改蓝牙代码 使用蓝牙控制

五、软件模块说明
本代码主要有三大模块具体实现如下
1、音频播放模块

  1. /**********************************************************
  2. * 函数名:player_my
  3. * 参数:
  4. * action:动作值,0:stop
  5. * uri:地址可以为空
  6. * vol:音量
  7. * 返回值:
  8. * RT_EOK:无错误
  9. * RT_ERROR:有错误,具体看log
  10. * 函数功能:控制MP3播放
  11. * ********************************************************/

  12.     #define stop_p 0
  13.     #define star_P 1
  14.     #define pause_P 2
  15.     #define resume_p 3
  16. int player_my(char action,char *uri,char vol)
  17. {
  18.     switch(action)
  19.     {
  20.         case stop_p:
  21.             rt_kprintf("//////////////////////////// player_stop \n");
  22.             player_stop();
  23.             rt_kprintf("//////////////////////////// player_stop end \n");
  24.             rt_kprintf("stop play.\n");
  25.             break;
  26.         case star_P:
  27.             if(uri !=RT_NULL)
  28.             {
  29.                 rt_kprintf("//////////////////////////// player_play \n");
  30.                 player_stop();
  31.                 player_set_uri(uri);
  32.                 player_play();
  33.                 rt_kprintf("//////////////////////////// player_play end \n");
  34.                 if(vol>0 && vol<100)
  35.                 {
  36.                     player_set_volume(vol);
  37.                     rt_kprintf("set play volume %d%%.\n", vol);
  38.                 }
  39.             }else
  40.             {
  41.                 rt_kprintf("url == null\n");
  42.                 return RT_ERROR;
  43.             }
  44.             break;
  45.         case pause_P:
  46.             rt_kprintf("//////////////////////////// player_pause \n");
  47.             player_pause();
  48.             rt_kprintf("//////////////////////////// player_pause end \n");
  49.             rt_kprintf("pause play.\n");
  50.             break;
  51.         case resume_p:
  52.             rt_kprintf("//////////////////////////// player_play(resume) \n");
  53.             player_play();
  54.             rt_kprintf("//////////////////////////// player_play(resume) end \n");
  55.             rt_kprintf("resume play.\n");
  56.             break;
  57.         default :
  58.             rt_kprintf("action ERROR\n");
  59.             return RT_ERROR;
  60.     }

  61. }


2、视频模块

该模块直接使用现有函数showphoto_thread进实现代码。由于希望将该摄像头的图片直接拍摄保存成图片,故去掉该函数的start_flag标志位判断。启动还是需要通过串口启动,后续准备使用蓝牙启动。


3、wifi模块

以下代码用于保存wifi密码和读取wifi密码
代码通过将账号和密码保存到txt文件实现(也可以保存成其他文件)
  1. /****************************************************
  2. * save_wifi_password
  3. * 参数:
  4. * ssid:ID
  5. * password:密码
  6. * 返回值:
  7. * RT_EOK:无错误
  8. * RT_ERROR:有错误,具体看log
  9. * 函数功能:保存wifi ID和密码
  10. ****************************************************/
  11. int save_wifi_password(char *ssid,char *password)
  12. {
  13.     int fb_ssid,fb_password;

  14.     fb_ssid = open("/sd/wifi_ssid.txt", O_WRONLY | O_CREAT);
  15.     if(fb_ssid==NULL)
  16.     {
  17.         rt_kprintf("open file error!");
  18.         return RT_ERROR;
  19.     }else
  20.     {
  21.         write(fb_ssid,ssid,sizeof(ssid));
  22.         close(fb_ssid);
  23.     }

  24.     fb_password = open("/sd/wifi_password.txt", O_WRONLY | O_CREAT);
  25.     if(fb_password==NULL)
  26.     {
  27.         rt_kprintf("open file error!");
  28.         return RT_ERROR;
  29.     }else
  30.     {
  31.         write(fb_password,password,sizeof(password));
  32.         close(fb_password);
  33.     }
  34.     return RT_EOK;
  35. }



  36. /****************************************************
  37. * 函数名:join_flsh_wifi
  38. * 参数:
  39. *
  40. * 返回值:
  41. * RT_EOK:无错误
  42. * RT_ERROR:有错误,具体看log
  43. * 函数功能:加入wifi
  44. ****************************************************/

  45. int join_flsh_wifi(void)
  46. {
  47.     network_InitTypeDef_st wNetConfig;
  48.     struct rt_wlan_device *wlan = RT_NULL;
  49.     char *ssid = RT_NULL;
  50.     char *password = RT_NULL;
  51.     int len;
  52.     int fb_ssid,fb_password;

  53.     fb_ssid = open("/sd/wifi_ssid.txt", O_RDONLY | O_CREAT);
  54.    
  55.     if(fb_ssid==0)
  56.     {
  57.         rt_kprintf("open file:/sd/wifi_ssid.txt error!");
  58.         return -RT_ERROR;
  59.     }else
  60.     {
  61.         read(fb_ssid,ssid,32);
  62.         close(fb_ssid);
  63.     }
  64.    
  65.     fb_password = open("/sd/wifi_password.txt", O_RDONLY | O_CREAT);
  66.     if(fb_password==0)
  67.     {
  68.         rt_kprintf("open file:/sd/wifi_password.txt error!");
  69.         return -RT_ERROR;
  70.     }else
  71.     {
  72.         read(fb_password,password,32);
  73.         close(fb_password);
  74.     }


  75.     rt_memset(&wNetConfig, 0x0, sizeof(network_InitTypeDef_st));

  76.     if (ssid == NULL)
  77.     {
  78.         rt_kprintf("ssid is null\r\n");
  79.         return -RT_ERROR;
  80.     }

  81.     len = rt_strlen(ssid);
  82.     rt_kprintf("ssid len = %d\r\n",len);
  83.     if (32 < len)
  84.     {
  85.         rt_kprintf("ssid name more than 32 Bytes\r\n");
  86.         return -RT_ERROR;
  87.     }

  88.     rt_strncpy((char *)wNetConfig.wifi_ssid, ssid, sizeof(wNetConfig.wifi_ssid));

  89.     if (password == NULL)
  90.     {
  91.         rt_memset(wNetConfig.wifi_key, 0, sizeof(wNetConfig.wifi_key));
  92.     }
  93.     else
  94.     {
  95.         if (sizeof(wNetConfig.wifi_key) < rt_strlen(password))
  96.         {
  97.             rt_kprintf("wifi key is more than %d Bytes\r\n", sizeof(wNetConfig.wifi_key));
  98.             return -RT_ERROR;
  99.         }
  100.         rt_strncpy((char *)wNetConfig.wifi_key, password, sizeof(wNetConfig.wifi_key));
  101.     }

  102.     wNetConfig.wifi_mode = STATION;
  103.     wNetConfig.dhcp_mode = DHCP_CLIENT;
  104.     wNetConfig.wifi_retry_interval = 100;

  105.     rt_kprintf("join_flsh_wifi: ssid:%.*s key:%.*s\r\n", wNetConfig.wifi_ssid, wNetConfig.wifi_key);
  106.     bk_wlan_start(&wNetConfig);

  107.     return RT_EOK;
  108. }

六、演示效果

由于现在已经变砖,无法看到实际效果 请参考代码


七、代码
半成品代码
https://wws.lanzous.com/iokMMe68y6d














 楼主| luoorshi 发表于 2020-7-6 23:36 | 显示全部楼层
添加附件  并求麻雀的 救砖模块

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部