首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AIoT应用创新大赛-基于TencentOS Tiny 的智能家居中控

AIoT应用创新大赛-基于TencentOS Tiny 的智能家居中控

原创
作者头像
羽翰尘
修改于 2022-03-07 09:21:51
修改于 2022-03-07 09:21:51
1.5K10
代码可运行
举报
文章被收录于专栏:腾讯云IoT腾讯云IoT
运行总次数:0
代码可运行
腾讯 AIoT 开发板.pptx

背景

随着科技水平的不断提高,生活水平的改善,智能家居产品正在不断走进日常生活。智能家居可以让家电更智能,更能让生活更舒适。智能家居也是互联网不断深化发展的产物。互联网连接的是人与人,进一步发展后形成物联网,连接人与物、物与物。

考虑到灯具与空调是使用最普遍的家电,可以从这两项入手做一套智能家居系统。

项目需求

设计并制作一套智能家居系统,可以完成对灯具和空调的控制。

  • 具备在中控屏上控制灯具与空调的能力
  • 具备在小程序中控制灯具与空调的能力
  • 具备语音控制灯具的能力

整体方案

硬件上采用 RT1062 开发板做中控,使用一块 800x480 的屏幕提供人机交互,使用 E53 接口的 LED 灯扩展用于充当灯具,使用 esp8266 模块为 RT1062 提供联网能力。另外使用 esp8266 和红外发射模块作为独立的红外遥控器。整体硬件连接如下图所示:

软件上采用 TencentOS Tiny 提供任务调度能力与 mqtt 的连接能力,云端使用腾讯云 IoT 开发平台处理数据。小程序端绑定腾讯连连小程序,提供远程控制能力。

红外遥控能力由单独的 esp8266 模块提供,该模块在接收到局域网内的 UDP 数据包后解析成 json 格式的控制指令,再转为红外编码数据,最终通过红外发射模块将数据传送给空调。

整体软件框架如下图所示:

方案实施细节-驱动部分

基础驱动

基础驱动指的是随开发板例程改好的驱动,不在此项目的范围内,但该驱动比较重要。

首先是TencentOS Tiny 的移植。TencentOS Tiny 为物联网设备打造的轻量操作系统,可以通过裁剪配置运行在资源紧张的单片机上。移植该实时操作系统的主要步骤是产生系统节拍、任务切换、串口输出几个部分。

其次是使用外置 SDRAM。因为本项目需要较多的外部资源,开发板本身提供了 16MB 的 SDRAM,可以用于做显示缓存等。该部分的驱动通过 RT1602 的 OCD 模块写入单片机,无需业务代码,可以保证外置 SDRAM 能够在启动后就处于可用状态。

接着是 LCD 驱动。采用 RT1602 的增强型液晶接口外设 eLCDIF,以及库函数中的驱动程序,配合上文中已经可用的外置 SDRAM 作为显存,可以方便地驱动开发板自带的 800x480 液晶显示屏。

最后是语音驱动。将开发板 mic 的短路问题解决后,即可用例程初始化音频编解码芯片,并完成音频的输入输出。

GUI 驱动

开发板已经自带了 LCD 的驱动,但如果想做人机交互,仍需要移植对应的 GUI 驱动。本项目采用 lvgl 作为 GUI 绘图层,该部分代码从 TencentOS Tiny 的组件中获取。

触摸屏驱动

人机交互重要的部分是处理输入,开发板自带的屏幕中含有触摸屏,但没有适配触摸屏驱动。

触摸屏的芯片是 GT911, 支持最大 5 点触摸,与开发板通过 I2C 接口连接。在软件上考虑用软件模拟 I2C 的方式来快速实现驱动。

首先移植软件 I2C 的驱动。按照 I2C 的时序图完成对 GPIO 的控制,并对外暴露如下 api:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      void    I2C_Send_Byte(uint8_t data);   

      uint8_t I2C_Read_Byte(unsigned char ack);

其次是移植 GT911 的驱动。该屏幕在出厂时已经写入了配置参数,所以无需做复杂配置,几乎上电后就可以用了。

触摸屏初始化完成后,每当有触摸事件发生时,都会通过 INT 引脚输出一个脉冲。开发板捕获这个脉冲的下降沿后,进入中断程序并置位触摸标志位。应用程序如果要判断触摸事件,先判断这个标志位,如果被置位,先复位,再去读触摸屏的寄存器,并最终获得触摸的位置。

中断处理代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 void GPIO5_Combined_0_15_IRQHandler(void) {
        GPIO_PortClearInterruptFlags(DEV_INT_GPIO, 1U << DEV_INT_PIN);
        Dev_Now.Touch = 1;
        SDK_ISR_EXIT_BARRIER;
      }

读取按键的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void GT911_get_xy(int16_t* x, int16_t* y) {
        uint8_t buf[41];
        uint8_t Clearbuf = 0;
        uint8_t i;

    
        if (Dev_Now.Touch == 0) {
          *x = 0;
          *y = 0;
          return;
        }

        Dev_Now.Touch = 0;
        // 看有多少个点
        GT911_RD_Reg(GT911_READ_XY_REG, buf, 1);
        Dev_Now.TouchpointFlag = buf[0];
        Dev_Now.TouchCount = buf[0] & 0x0f;
        if (Dev_Now.TouchCount > 5 || Dev_Now.TouchCount  == 0) {
          GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *) & Clearbuf, 1);
          tos_sleep_ms(10);
          return;
        }

        // 这里只读第一个寄存器
        GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *)&Clearbuf, 1);
        tos_sleep_ms(10);

        GT911_RD_Reg(GT911_READ_XY_REG + 1, &buf[1], Dev_Now.TouchCount * 8);
        GT911_WR_Reg(GT911_READ_XY_REG, (uint8_t *) & Clearbuf, 1);
        tos_sleep_ms(10);

        Dev_Now.Touchkeytrackid[0] = buf[1];
        *x = ((uint16_t)buf[3] << 8) + buf[2];
        *y = ((uint16_t)buf[5] << 8) + buf[4];
        
        // 处理完后再置为 0
        // 如果一开始就置为 0,中断随时发生,会被再次置为 1
        Dev_Now.Touch = 0;

      }

LVGL 移植

Lvgl 的移植包含几部分,输出设备的移植与输入设备的移植。这里的输出设备即 lcd 屏幕,输入设备即触摸屏。输出设备采取双缓冲区的方案,缓冲区大小与屏幕相同,可以降低驱动移植的复杂度。输入设备包含初始化与读取坐标。

将 lv_port_indev_template.c 复制为 lv_port_indev.c,并在 touchpad_init 里面初始化触摸屏:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static void touchpad_init(void)
{
    GT911_Init();
}

随后在 touchpad_read 中读出相应的坐标

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static bool touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
      {
          static lv_coord_t last_x = 0;
          static lv_coord_t last_y = 0;

          /*Save the pressed coordinates and the state*/
          if(touchpad_is_pressed()) {
              touchpad_get_xy(&last_x, &last_y);
              data->state = LV_INDEV_STATE_PR;
          } else {
              data->state = LV_INDEV_STATE_REL;
          }

          /*Set the last pressed coordinates*/
          data->point.x = last_x;
          data->point.y = last_y;

          /*Return `false` because we are not buffering and no more data to read*/
          return false;
      }

      /*Return true is the touchpad is pressed*/
      static bool touchpad_is_pressed(void) {
          /*Your code comes here*/
          return GT911_is_pressed();
      }
  
      /*Get the x and y coordinates if the touchpad is pressed*/
      static void touchpad_get_xy(lv_coord_t * x, lv_coord_t * y) {
        /*Your code comes here*/
        GT911_get_xy(x, y);
      }

将 lv_port_disp_template.c 复制为 lv_port_disp.c,并调用 lcd 的驱动即可,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  static void disp_init(void)
      {
          /*You code here*/
          lcd_init();
      }

static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
 {
         /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/
          // 此处直接设置 lcd 渲染下一帧
          lcd_flush(color_p);

          /* IMPORTANT!!!
           * Inform the graphics library that you are ready with the flushing*/

          lv_disp_flush_ready(disp_drv);
}

红外驱动

用来测试的空调是美的品牌,其控制方式有些特殊。先看红外数据编码。

基本编码格式为: L,A,A’,B,B’,C,C’, S, L,A,A’,B,B’,C,C’。

L为引导码;S为分隔码;A为识别码(A=10110010=0xB2,预留方案时A=10110111=0xB7),A’为A的反码;B’为B的反码;C’为C的反码。

引导码 L:

分割码:

数据 1:

数据 0:

终止符:

在进行普通风速、温度、模式控制时,B 和 C 的值按下图进行设置:

当关机的时候 B 固定为 0111 1011(0x7b),C 固定为 1110 0000(0xe0)

这里的红外数据数组是一个重要概念,它记录了一个红外数据帧的数据组成。数组的元素每两个成一组,表明低电平的持续时间、高电平的持续时间,时间单位是微秒。一个实例如下:

C unsigned short int ir_data = [4400, 4400, 540, 1620, 540, 540, ..., 540];

前两个数据表示先持续 4.4ms 的低电平,再变为 4.4ms 的高电平,对比物理层协议得知这是一个起始位;接着持续 0.54ms 的低电平,1.62ms 的高电平,这是一个数据位 1;随后是一个数据位 0;最后一个 540 表示终止符。

红外遥控器是在另一块 esp8266 上实现的,实现方案采用 IRbaby 固件 https://github.com/Caffreyfans/IRbaby。因为美的空调需要特殊的红外数据,最终对 IRbaby 进行定制。在了解实现方式后,可以看到在 src/IRbabyIR.cpp中进行定制比较方便,注释掉ir_decode函数,再新编写generate_midea_ac函数替换其功能,得到红外数据数组即可。

方案实施细节-应用部分

在应用方面共分为四个任务,分别是联网任务、显示任务、音频采集任务和音频识别任务。代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main(void) {
  // 硬件初始化
  BOARD_ConfigMPU();
  BOARD_InitPins();
  BOARD_BootClockRUN();
  BOARD_InitDebugConsole();
  AUDIO_Init();

  PRINTF("Welcome to TencentOS tiny\r\n");

  osKernelInitialize();

  // 初始化信号量
  tos_sem_create(&mic_data_ready_sem, 0);

  // 语音识别任务
  tos_task_create(&task1, "audio loop back task", audio_loop_back_task, NULL, 4, task1_stk, TASK1_STK_SIZE, 0);
  tos_task_create(&task2, "clara detection task", clara_detection_task, NULL, 3, task2_stk, TASK2_STK_SIZE, 0);

  // 连接腾讯云 IoT 平台
  tos_task_create(&mqtt_task_t, "mqtt task", mqtt_task, NULL, 2, mqtt_task_stk, MQTT_STK_SIZE, 0);

  // 显示任务
  tos_task_create(&display_task_t, "display task", display_task, NULL, 4, display_task_stk, DISPLAY_STK_SIZE, 0);


  // Clara引擎初始化
  int ret = Clara_create(&clara_heap[0], MEM_POOL_SIZE, SAMPLES_PER_FRAME, DEFAULT_DURATION_IN_SEC_AFTER_WUW);
  PRINTF("\n%s init[%d]\n", Clara_get_version(), ret);

  PRINTF("\r\nClara wakeup example started!\r\n");
  PRINTF("\r\nSay wakeup words: 1)Xiaozhi xiaozhi kai deng; 2)Xiaozhi xiaozhi guan deng; 3)Xiaozhi xiaozhi bian yan se\r\n");
  PRINTF("Trial version for 50 times wakeup test\r\n");
  PRINTF("喊出唤醒词:1)小智小智开灯,2)小智小智关灯,3)小智小智变颜色\r\n");
  PRINTF("50次唤醒试用版\r\n\r\n");

  osKernelStart();
}

在完成开发板的初始化后,依次创建四个任务并执行任务调度。这里要注意任务的优先级,mqtt 的联网任务属于高优先级,设置为 2;音频采集和界面刷新都是需要周期执行的,优先级设置为 4;如果音频缓冲区满,应该优先做音频识别,所以音频识别任务的优先级设置为 3.

联网任务

任务的目的是通过 WIFI 接入腾讯云 IoT 开发平台的 mqtt 服务器,订阅开发板的 topic 并在开发板的属性变更时及时同步到云端。

接入 mqtt

esp8266 at 驱动部分已经由 TencentOS Tiny 完成,我们只需要按步骤接入腾讯云 IoT 开发平台即可。主要的工作流程如下

灯具控制

开发板附带了一个 E53 接口的 LED 灯,可以用来模拟灯具。灯具的控制是简单的开关量,在 IoT 开发平台新建卧室灯的数据模板,同时在小程序端新建灯具的控制组件,如下图所示。

回调函数的主要流程如下:

空调控制

在上文中已经解决了美的空调的底层控制逻辑,在应用部分主要解决用户界面以及小程序与智能中控的通信。

考虑空调的基本功能为开关 + 温度控制,所以新建一个开发量的数据模板和一个整数型的数据模板,其中空调温度要设置最低 16 最高 28。

回调函数的处理流程如下:

显示任务

本任务用于驱动 lvgl 的正常显示,同时绘制开关控件和微调器控件。

界面绘制

使用 lvgl 的控件库设计并制作了灯的开关、空调开关、空调温度控制三个控件。

关键代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// light
  lv_obj_t* light_text = lv_label_create(lv_scr_act(), NULL);
  lv_obj_align(light_text, NULL, LV_ALIGN_CENTER, -20, -20);
  lv_label_set_text(light_text, "light");
  light_sw = lv_sw_create(lv_scr_act(), NULL);
  lv_obj_align(light_sw, light_text, LV_ALIGN_OUT_RIGHT_MID, 10, 0);
  lv_obj_set_event_cb(light_sw, light_event_handler);

  // ac
  lv_obj_t* ac_text = lv_label_create(lv_scr_act(), NULL);
  lv_obj_align(ac_text, NULL, LV_ALIGN_CENTER, -20, 20);
  lv_label_set_text(ac_text, "ac_on");
  ac_sw = lv_sw_create(lv_scr_act(), NULL);
  lv_obj_align(ac_sw, ac_text, LV_ALIGN_OUT_RIGHT_MID, 8, 0);
  lv_obj_set_event_cb(ac_sw, ac_event_handler);

  // ac temp
  spinbox = lv_spinbox_create(lv_scr_act(), NULL);
  lv_spinbox_set_range(spinbox, 16, 28);
  lv_spinbox_set_digit_format(spinbox, 2, 0);
  lv_spinbox_step_prev(spinbox);
  lv_obj_set_width(spinbox, 100);
  lv_obj_align(spinbox, ac_text, LV_ALIGN_OUT_BOTTOM_MID, 20, 20);
  lv_spinbox_step_next(spinbox);

实际展示效果如下图所示:

周期刷新

Lvgl 需要定期执行 lv_task_handler 函数,将其放入显示任务中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void display_task(void *arg) {
  PRINTF("begin init lcd...");
  lv_init();
  lv_port_disp_init();
  lv_port_indev_init();
  PRINTF("lcd init done.");

  PRINTF("begin init touch screen");
  GT911_Init();
  PRINTF("init touch screen done");
  demo_create();

  while (1) {
    lv_task_handler();
    tos_sleep_ms(200);
  }
}

同时,lvgl 还要求定期执行 lv_tick_inc 函数,将其放到 SysTick_Handler 中执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void SysTick_Handler(void)
{
  if (tos_knl_is_running())
  {
    tos_knl_irq_enter();
    tos_tick_handler();
    tos_knl_irq_leave();
  }
  // lvgl 的 tick,注意要配置 systick 为 1ms
  lv_tick_inc(1);
}

音频采集与识别任务

音频采集的目的是从编解码芯片中逐帧接收数据,处理后通知识别任务做识别。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void audio_loop_back_task(void *arg)
{

  while (1) {
    // 如果有 buffer 空闲,就开启 dma 传输任务
    if (emptyBlock > 0) {
      xfer.data     = Buffer + rx_index * BUFFER_SIZE;
      xfer.dataSize = BUFFER_SIZE;
      if (kStatus_Success == SAI_TransferReceiveEDMA(DEMO_SAI, &rxHandle, &xfer)) {
        mic_frame_preprocess((uint16_t *)(xfer.data), xfer.dataSize/2);
        tos_sem_post(&mic_data_ready_sem);
        rx_index++;
      }
      if (rx_index == BUFFER_NUMBER) {
        rx_index = 0U;
      }
    }
   }
}

音频识别采用的是已训练好的 Clara 语音识别模型,如果匹配到对应的语音,会给出关键词 id。根据关键词 id 去控制灯的亮灭即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void clara_detection_task(void *arg)
{
  extern uint16_t mic_16khz_buffer[];

  int frame_cnt = 0;
  int kw_total_num = 0;
  int light_duration = 0;
  int kw_detected = 0;

  while(1)
  {
    tos_sem_pend(&mic_data_ready_sem, -1); //pend forever until mic audio ready

    kw_detected = Clara_put_audio_two_phases(mic_16khz_buffer, SAMPLES_PER_FRAME, &clara_result);

    if (kw_detected > 0)
    {
      kw_total_num++;

      // check wakeup result
      PRINTF("\n[ClrDbg]  Vox-AI: Clara got %d:%s (utf8 %dB) duration %d ms, score %d, conf %d, total %d\n", \
                    clara_result.kws_id, clara_result.kws, clara_result.kws_len,clara_result.duration,
             clara_result.score, clara_result.confidence, kw_total_num);
      if (clara_result.kws_id == 17) {
        ctrl_light(1);
      } else if (clara_result.kws_id == 18) {
        ctrl_light(0);
      }

    }
    
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
大佬,开源不
大佬,开源不
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
AIoT应用创新大赛-基于TencentOS Tiny的家庭安全监控系统
随着科技的发展与进步,人们家庭的智能设备和产品越来越多,接入电网的设备也会越来越多,量变导致质变,家庭设备总用电监控,能极大的帮助人们了解日常用电情况;
大白菜L
2022/03/15
1.8K1
AIoT应用创新大赛-基于TencentOS Tiny的家庭安全监控系统
野火指南者开发板移植 lvgl 库
由于近期要做一个装置 ,想着把装置做的好看一点,就打算使用 GUI 来做一个信息的相关显示,之前听说过一款比较轻量级的图形库,也就是 lvgl,手头又正好有一块搭配屏幕的野火指南者开发板,单片机型号是 STM32F103VET6,Flash 为 512KB,RAM 为 64KB,屏幕为 3.2 寸电阻触摸屏,我们在来看一下运行 lvgl 这个 GUI 需要的资源,所需资源如下图所示:
wenzid
2021/03/04
2.5K0
野火指南者开发板移植 lvgl 库
AIoT应用创新大赛-基于TencentOS Tiny AIoT NXP自动摄像仪
TencentOS tiny联合NXP推出的RT1062开发板让人眼前一亮,能够实现众多的强大功能,但是我只能选取一瓢来实现本次比赛的作品。看到摄像头的功能,和较大的内存以及强大算力,我最先想到的是可以自动抓拍人们经过某个区域时照片,这样我不用一直开着摄像机,省电又可以延长摄像头的寿命。特别在许多无人区更需要这样的一台简单又实用的设备,且也不需要长期监控的,又能够节约能源。例如我们出差时,家里长时间没人,又担心有人一盯上家里的财物,而经常在门口转悠,这个时候就可以通过检测是否有人启动摄像头,并通过腾讯云平台传递信息到手机中提醒有人在门口长时间逗留。
极速紫韵
2022/03/11
1.3K0
AIoT应用创新大赛-基于TencentOS Tiny AIoT NXP自动摄像仪
AIoT应用创新大赛-基于TencentOS Tiny 的会议室使用小助手
诸如会议室等隐私场所,不能通过单纯的安装监控进行管理,实际管理中却又想得知是否有人在使用。为解决此类问题,会议室使用小助手横空出世。
烫烫烫烫烫烫锟斤拷
2022/02/07
1.8K0
AIoT应用创新大赛-基于TencentOS Tiny 的会议室使用小助手
开发者成长激励计划-基于TencentOS Tiny智能家居控制终端
本次的开发者成长激励计划我打算制作一款智能家居监测和集成控制终端,本次完成了对家庭环境数据上传,主要有PM2.5环境监测,和SHT20温湿度数据监测,本来还打算监测下TVOC数据的,由于传感器原因没有做了,后期可以加上,所以我先弄了一些假数据上传演示,本次下发的控制设备我做了一个红外控制空调的操作,可以控制模式,设备温度。CH32V307开发板板载功能可以实现全部功能,而无需外加其他设备。
用户6340714
2022/08/10
7902
开发者成长激励计划-基于TencentOS Tiny智能家居控制终端
AIoT应用创新大赛-基于TencentOS Tiny的智能车钥匙
UWB数字钥匙是全新的无钥匙进入系统,在接近车辆时,根据距离车辆会自动首先开启迎宾灯,然后随着距离的接近,会自动调整座椅位置等,然后靠近车门时,则自动解锁;当远离车辆时,也能够自动根据位置变化来自动锁车。解决车辆电子钥匙中继攻击的安全漏洞。UWB钥匙的优点在于,它是一项具有近距离精确空间感知能力的技术;准确性高,感应智能手机位置的准确性约为现有产品的 5 倍。
大盛
2022/03/12
6660
AIoT应用创新大赛-基于TencentOS Tiny的智能车钥匙
AIoT应用创新大赛-基于TencentOS Tiny的智能车钥匙
UWB数字钥匙是全新的无钥匙进入系统,在接近车辆时,根据距离车辆会自动首先开启迎宾灯,然后随着距离的接近,会自动调整座椅位置等,然后靠近车门时,则自动解锁;当远离车辆时,也能够自动根据位置变化来自动锁车。解决车辆电子钥匙中继攻击的安全漏洞。UWB钥匙的优点在于,它是一项具有近距离精确空间感知能力的技术;准确性高,感应智能手机位置的准确性约为现有产品的 5 倍。
大盛
2022/03/12
1.1K0
AIoT应用创新大赛-基于TencentOS Tiny的智能车钥匙
AIoT应用创新大赛-keil开发--(2)移植TencentOS tiny与对接腾讯云IoT
在上一篇中,我们利用MCUXpresso Config Tools生出来一个Hello World 的裸机工程,这一篇将在Keil环境下移植TencentOS tiny到这个裸机工程,并移植对接腾讯云的工程。
烫烫烫烫烫烫锟斤拷
2022/01/09
2K0
【IoT应用创新大赛】基于TencentOS tiny的 智能 家居总控系统
​首先,我要先讲一下概念,在传统的生活方式中呢,我们都是手动打开电器,亲自去检查门有没有关好,亲手去拉窗帘。 而到了现在,我们有了各种各样的智能电器,例如智能电视,智能门锁这些。    而现实中这些设备往往对普通人来说是可望不可即的存在,因为它们造价比较昂贵,比较少的人消费的起。      而有没有一种居中的方法让他们之间调和呢,于是我就设计出了这个智能管家设备,也就是 智能   家居总控系统。它的主要特点是可以智能的控制家里的各种设备,例如电视啊,窗帘这些,还可以实时的监控家里的物理状态,让我们在外面可以简单的了解到家里的情况,就例如门到底锁好没有,空调有没有关。 而这个 智能 家居总控系统 相比于智能家电最大的不同在于它只有一个mcu, 一个mcu控制整个家庭的设备,而不必给每个设备都装上mcu和联网模块。 所以,这个智能 家居总控系统 相当于起到了一个管家的角色
黑白方圆丶
2020/04/20
1.2K0
【开发者成长激励计划-基于TencentOS Tiny 的室内空气质量监测】
近年来,清洁的室内空气成为诸多重视健康生活人士的新需求。评价室内空气质量的重要指标有2个:VOC(挥发性有机化合物):VOC 是在室温或更高温度下蒸发的含碳物质。短期接触会导致刺激、头晕或哮喘恶化;长期接触则可能会导致肺癌或损害肝脏、肾脏或神经系统。温湿度:40-60%的相对湿度是人类理想的舒适度范围。极度干燥的空气会刺激呼吸道,而过分潮湿的空气会导致冷凝,进而引发霉菌滋生,其他影响可能包括头痛甚至偏头痛。改善室内空气质量有两种方式:通风和净化。对于家庭或小型封闭空间而言,如果周围的室外空气干净,理想选择是打开窗户或使用智能通风系统进行通风。室内空气质量的监测数据可用于配置空气净化系统或智能管理通风系统,本文基于CH32V307开发板利用腾讯云物联网平台IoT Explorer 和腾讯连连小程序开发了能够实时监测室内空气质量的应用。
用户9804800
2022/08/10
5040
AIoT应用创新大赛-基于TencentOS Tiny 人脸计数的实践
这次的项目主要是对比赛提供的资源的一次简单实践,将摄像头所识别的人脸数目传送到微信小程序上,模型是提前训练好的,在比赛的板子上进行推理,然后将识别到的人数,以json的格式传送给腾讯云物联网平台,然后由该平台注册的设备和腾讯连连小程序绑定,用户可以通过小程序看到设备周围的人数(准确的说是摄像头拍到的),适用的场景可以是一些防盗报警设备,检测到人数立即上报,该方案最初的设想是根据超声波测活动物体范围以及使用摄像头校准,能得到更加精确的结果。
用户8204584
2022/03/13
9050
【AIoT应用创新大赛-基于TencentOS Tiny 的智能取暖器】
取暖器在我们日常生活中已经很常见了,冬天的保命法宝,但是平时浏览新闻的时候发现因取暖器使用不当造成人身财产安全问题的事件频频出现,严重的威胁到生命安全,基于此种现象,此次大赛特设计一款可以接入腾讯云平台的智能取暖器,不仅可以通过手机远程操作取暖器是否工作,还能辅助日常感知环境温度,结合智能硬件带来的智能关停,智能联动提升安全性的同时更让生活多姿多彩.
物联风景
2022/03/15
8891
【AIoT应用创新大赛-基于TencentOS Tiny 的智能取暖器】
Tina-SDK开发
Tina-SDKV2.0源码网盘链接:https://pan.baidu.com/s/13uKlqDXImmMl9cgKc41tZg?pwd=qcw7
韦东山
2024/08/24
8530
Tina-SDK开发
AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车
很早就有做个智能小车的想法,但由于时间有限和囊中羞涩,一直没有付出行动,感谢腾讯TencentOS Tiny团队的信任,给了这么一次机会,虽然离自己的设想的功能还差很多,但至少迈出了重要的一步,更重要的是能学习TencentOS Tiny实时操作系统 和i.MX RT系列应用处理器,在此表示感谢。
用户9320370
2022/03/06
1.1K0
AIoT应用创新大赛-基于TencentOS Tiny 的遥控小车
AIoT应用创新大赛-基于TencentOS Tiny的护眼台灯
现如今由于新冠疫情影响,疫情催生着在线教育,让很多学习场景从学校、教室转移至家庭、宿舍。作为开学即隔离的学生党感受颇深QAQ,每天的网课和作业对用眼需求更大,昏暗的宿舍和巨亮的屏幕更是增大了眼睛的压力。于是就有了开发此demo的想法,同时感谢TencentOS团队提供的这次机会开启了我学习嵌入式操作系统,以及学习NXP系列MCU的旅程。
JGMMS
2022/03/12
1.6K0
AIoT应用创新大赛-基于TencentOS Tiny 的远程CAN数据监控
随着物联网的发展,生活中带有网络的电器,很是方便。也有此也对网络控制产生了兴趣,接触嵌入式底层驱动和硬件设计方面的较多,对网络控制还不是很了解,一直想要尝试下使用物联网平台和嵌入式硬件的通信控制。感谢物联网开发平台提供的如软硬件资源,来实现我这个想法,接收设备的CAN通信数据,远程发送到腾讯云的物联网开发平台IoT Expolorer。
用户4136378
2022/03/07
6910
【腾讯连连IoT开发大赛】基于TencentOS Tiny的智能甲醛探测与云打印系统
达特甲醛探测仪是基于英国达特公司设计开发的WZ-S型甲醛检测模组设计开发的,它可以用于检测环境中甲醛的浓度,以提示用户运用科学有效的方法降低甲醛污染,进而使环境的空气质量变得更加清新,也进一步提高用户的健康意识以及对生活品质的追求。
杨源鑫
2021/01/10
3K1
【腾讯连连IoT开发大赛】基于TencentOS Tiny的智能甲醛探测与云打印系统
AIoT应用创新大赛 基于TencentOS Tiny智能家居自动浇灌监控系统
一、总体设计家居自动浇灌监控系统主要实现了在室内环境下植物的湿度监测和自动浇灌。系统基于TencentOS Tiny EVB_AIoT开发板和NXP的MCUXpresso IDE,使用了土壤湿度传感器监测土壤湿度,并通过TencentOS Tiny的MQTT模块传输至腾讯云物联网开发平台(IoT Explorer),可根据设定阈值由外接的水泵对上述环境变量进行控制,系统连接腾讯云后可以实时远程观测植物土壤湿度并手动控制水泵启停。添加描述二、具体设计与实现(一)硬件方案系统基于TencentOS Tiny AIoT开发套件,套件核心板采用NXP i.MX RT1062处理器,套件自带物联网俱乐部的基于WAN Interface接口的ESP8266模组和E53模块,额外模组有fly-fish的土壤湿度采集模块,水泵由于过年不发货,年后又由于疫情不发货,导致迟迟不能到位,眼看交作业日期一天天临近,于是打上了E53模组上的LED灯的主意,假设为水泵吧,反正都是一个针脚IO控制。添加描述(二)软件方案与实现1.MQTT线程,负责连接腾讯云,接收土壤湿度数据并转发至腾讯云,接收腾讯云的控制命令,启停水泵。 2.ADC线程,负责采集土壤湿度采集模块的数据并通过消息队列转发至MQTT线程,经测试ADC数据只能在2900(水中)到4096(空气中)之间变化,所以做了个简单的量化数据计算公式(100 - (adcVal - 3096)/10),按照湿度百分比来计算。添加描述3.PUMP线程,接受来自MQTT线程的命令,启停水泵,本案例中是亮灭E53模块的LED灯。4.LED线程,按照每1s切换一次的频率,点亮、熄灭板子上的蓝色LED灯,指示系统是否正常工作。三、功能展示(一)总体展示业务逻辑实现。添加描述历史数据展示:添加描述(二)数据采集+本地控制土壤湿度超过一定值,水泵(E53 LED)停止工作,同时往腾讯云上报的数据如下图。添加描述土壤湿度低于一定值,水泵(E53 LED)开始工作,同时往腾讯云上报的数据如下图。添加描述(三)云端控制如果需要人工控制水泵的话,直接在云端下发命令,人工接管水泵工作。添加描述(四)腾讯连连添加描述四、一些想法和建议(一)关于RT1062和IDE。RT1062这颗U很强大很赞,譬如跑个RTOS,别家的U在这个负荷已经开始烫手了,得益于更先进的制程,1062一点温度都没有感觉到。MCUXpresso IDE的Pins模块,对于不熟悉NXP产品的人来说,尤其是默认路由功能,真的是救星一般,单论针脚选择和初始化生成,感觉比CUBEMX还要好用一点。同样的,缺点(或者是不习惯的地方)也很明显,一方面是MCU的针脚命名,去寻找一个针脚真心费劲;另一方面是资料,相关资料较少,譬如网上找了很多资料关于FlexRAM配置都有点不痛不痒,很希望有个类似Pins这样的图形化生成小工具。(二)关于TencentOS Tiny和IoT Explorer。TencentOS Tiny的确很Tiny,各项资源开销都很小,几个组件的确稳定,譬如这次用到的MQTT组件,对比别家的跑着跑着一天内就掉线,Tiny的没有这现象。Tiny的一个问题不得不说,就是文档不知道是不是太老旧还是不同步,资料不全,譬如想知道消息队列的案例,gitee上给的是指向github的链接,因为没有梯子,只能国内的找找,到底是用tos_msg_q_create()还是tos_msg_queue_create()亦或者用tos_queue_create()创建MQ,哪个是最新的? 最后,感谢腾讯提供这么一次机会近距离实战体验RT1062和TencentOS Tiny。智能家居自动浇灌监控系统
周鹏
2022/03/14
6970
【STM32H7教程】第54章 STM32H7的LTDC应用之LCD电阻触摸和电容触摸
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第54章       STM32H7的LTDC应用之LCD电阻触摸和电
Simon223
2020/02/24
1.6K0
【STM32F429】第7章 ThreadX GUIX移植到STM32F429(MDK AC5)
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第7章 ThreadX GUIX移植到STM32F429(MDK AC
Simon223
2020/12/01
1.1K0
【STM32F429】第7章   ThreadX GUIX移植到STM32F429(MDK AC5)
推荐阅读
相关推荐
AIoT应用创新大赛-基于TencentOS Tiny的家庭安全监控系统
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档