前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛-基于TencentOS Tiny的护眼台灯

AIoT应用创新大赛-基于TencentOS Tiny的护眼台灯

原创
作者头像
JGMMS
发布2022-03-12 16:24:19
1.4K0
发布2022-03-12 16:24:19
举报
文章被收录于专栏:tos活动

演示视频

视频内容

PPT

PPT

一. 设计背景

现如今由于新冠疫情影响,疫情催生着在线教育,让很多学习场景从学校、教室转移至家庭、宿舍。作为开学即隔离的学生党感受颇深QAQ,每天的网课和作业对用眼需求更大,昏暗的宿舍和巨亮的屏幕更是增大了眼睛的压力。于是就有了开发此demo的想法,同时感谢TencentOS团队提供的这次机会开启了我学习嵌入式操作系统,以及学习NXP系列MCU的旅程。

二. 项目功能

项目总体功能框图
项目总体功能框图

坐姿检测

通过HC-SR04超声波模块实时检测使用者与台灯之间的距离判断坐姿,提醒使用者调整坐姿。

暗环境开灯提醒

再也不会忘记太阳落山时开灯了。。。

柔和调光

现在市面的大多数台灯都只是分几档亮度,拥有无极调光的台灯价格都不太友好。于是增加了PWM无极调光,光线柔和变换,减轻用眼负担。

小程序控制

TencentOS-Tiny作为物联网操作系统依托腾讯强大的物联网云平台可以让项目更简单的接入微信小程序,不用下载第三方APP即可做到远程遥控。

三. 硬件部分

EVB-AIoT 开发板

EVB-AIoT开发板
EVB-AIoT开发板
  • 核心板采用的RT1062处理器属于i.MX RT 系列 MCU,是由 NXP 推出的跨界处理器,跨界是指该系列MCU的定位既非传统的微控制器、也非传统的微处理器,i.MX RT 系列 MCU 则综合了两者的优势,既具备高频率(最高主频600M)、高处理性能,也具备中断响应迅速、实时性高的特点。
  • 1M RAM 16M SDRAM 64MB qspi flash 128MB spi flash。
  • 板载Type-C接口CMSIS DAP仿真器。
  • 板载PCIE接口,可扩展4G类物联网模组。
  • 板载物联网俱乐部WAN Interface接口,可支持NB-IoT、WiFi、4G cat1、LoRa等模组。
  • 板载物联网俱乐部E53 Interface接口,可扩展全系E53传感器。
  • 板载标准24P DVP摄像头接口,可支持最高500万像素摄像头。
  • 板载RGB显示接口,可转换HDMI输出。
  • 板载高性能音频解码芯片,可做语音识别测试。
  • 预留SD卡、用户按键、SPI Flash。

HC-SR04超声波传感器

HC-SR04超声波传感器
HC-SR04超声波传感器

HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、接收器与控制电路。

  • 采用 I/O 口 TRIG 触发测距,给最少 10us 的高电平信呈
  • 模块自动发送 8个40khz 的方波,自动检测是否有信号返回
  • 有信号返回,通过I/O口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。测试距离=(高电平时间*声速(340M/S))/2

I/O连接如下:

HC-SR04 引脚连接
HC-SR04 引脚连接

蜂鸣器模块

蜂鸣器模块
蜂鸣器模块

有源蜂鸣器一枚,低电平触发。

I/O连接如下:

蜂鸣器 引脚连接
蜂鸣器 引脚连接

BH1750环境光传感器

BH1750环境光传感器
BH1750环境光传感器

BH1750环境光传感器内置16位的模数转换器,通过IIC接口能够直接输出一个数字信号,不需要再做复杂的计算。能够直接通过光度计来测量。光强度的单位是流明"lux"。当物体在均匀的光照下它能够在每平方米获得1lux的光通量,它们的光强度是1lux。量程为 1-65535lux。

I/O连接如下:

E53_SC1 引脚连接
E53_SC1 引脚连接

ESP8266 WiFi模块

ESP8266 WiFi模块
ESP8266 WiFi模块

ESP8266系列无线模块是一个经济高效的WIFI SOC模块,支持标准IEEE802.11b/g/n协议,内置完整的TCP/IP协议栈。 用户可以使用此系列模块向现有设备添加网络功能,也可以构建独立的网络控制器。

I/O连接如下:

ESP8266 引脚连接
ESP8266 引脚连接

四. 软件部分

软件开发使用了MCUXpresso Config Tools v10和Keil MDK进行了开发,MCUXpresso Config Tools是NXP的一款类似STM32CubeMX的配置工具,但它的功能要更加强大,可以直接生成一些SDK工程,可以快速学习一些外设和库函数的使用方法,可以极大的提高开发效率。

MCUXpresso Config Tools
MCUXpresso Config Tools
任务结构
任务结构

mqttclient_task

代码语言:javascript
复制
void mqttclient_task(void)
{
    int error;
    mqtt_client_t *client = NULL;
    mqtt_message_t msg;
    k_event_flag_t match_flag;
    char  host_ip[20];
    uint16_t lux;
    memset(&msg, 0, sizeof(msg));
    esp8266_sal_init(HAL_UART_PORT_2);
    esp8266_join_ap("*******", "*******");//WiFi SSID, WiFi Password
    bh1750_init();
    mqtt_log_init();
    client = mqtt_lease();  
    tos_event_create(&report_result_event, (k_event_flag_t)0u);    
    /* Domain Format: <your product ID>.iotcloud.tencentdevices.com */
    tos_sal_module_parse_domain("7VIN7U0AXQ.iotcloud.tencentdevices.com",host_ip,sizeof(host_ip));
    
    /*
        These infomation is generated by mqtt_config_gen.py tool in "TencentOS-tiny\tools" directory.
    */
    mqtt_set_port(client, "1883");
    mqtt_set_host(client, host_ip);
    mqtt_set_client_id(client, "7VIN7U0AXQdev001");
    mqtt_set_user_name(client, "7VIN7U0AXQdev001;21010406;12365;4294967295");
    mqtt_set_password(client,  "8d5dfc28d97785d5b0b57fcfd449485c18a0a998;hmacsha1");
    mqtt_set_clean_session(client, 1);

    error = mqtt_connect(client);
    
    MQTT_LOG_D("mqtt connect error is %#0x", error);
    
    error = mqtt_subscribe(client, "$thing/down/property/7VIN7U0AXQ/dev001", QOS0, tos_topic_handler);
    
    MQTT_LOG_D("mqtt subscribe error is %#0x", error);
    
    while (1) {
        bh1750_start(ONCE_H_MODE);
        tos_task_delay(160);
        bh1750_read_lux(&lux);
        printf("bh1750 lux is %d\r\n",lux);
        
        memset(&msg, 0, sizeof(msg));
        snprintf(report_buf, sizeof(report_buf), REPORT_DATA_TEMPLATE,lux);
 		
			/*光亮度数据参考:
			*晚上: 0.001-0.02;
			*月夜: 0.02-0.3;
			*多云室内: 5-50;
			*多云室外: 50-500;
			*晴天室内: 100-1000;
			*阅读书籍时的照明度:50-60;
			*家庭录像标准照明度:1400
			*/
				if(lux <= 50){								
					GPIO_PinWrite(GPIO3, 2, 1);
				}else{
					GPIO_PinWrite(GPIO3, 2, 0);
				}
				
        msg.qos = QOS0;
        msg.payload = (void *) report_buf;
        error = mqtt_publish(client, "$thing/up/property/7VIN7U0AXQ/dev001", &msg);
        MQTT_LOG_D("mqtt publish error is %#0x", error);
        
        tos_event_pend(&report_result_event, 
                       report_success|report_fail,
                       &match_flag,
                       TOS_TIME_FOREVER,
                       TOS_OPT_EVENT_PEND_ANY | TOS_OPT_EVENT_PEND_CLR);
        
        if (match_flag == report_success) {
            printf("report to Tencent IoT Explorer success\r\n");
        
        }else if (match_flag == report_fail){
            printf("report to Tencent IoT Explorer fail\r\n");
        }
        
        tos_task_delay(2000); 
    }
}

blink_task

代码语言:javascript
复制
void blink_entry(void *arg){
		while(1){
			if(lastbrightness < brightness){
				for(temp = lastbrightness ; temp < brightness ; temp++){
					PWM_UpdatePwmDutycycle(PWM4, kPWM_Module_3, kPWM_PwmA, kPWM_SignedCenterAligned, temp);//更新占空比 
					PWM_SetPwmLdok(PWM4,kPWM_Control_Module_3, true);
					tos_task_delay(5);
				}
			}else if(lastbrightness > brightness){
				for(temp = lastbrightness ; temp > brightness ; temp--){
					PWM_UpdatePwmDutycycle(PWM4, kPWM_Module_3, kPWM_PwmA, kPWM_SignedCenterAligned, temp);//更新占空比 
					PWM_SetPwmLdok(PWM4,kPWM_Control_Module_3, true);
					tos_task_delay(5);
				}
			}
			lastbrightness = brightness;		
		}	 
}

distance_task

代码语言:javascript
复制
void Distance_judge_entry(void *arg){
	int distance_flag;
	while(1){
		Distance_measurement();//超声波测距
					
		if(distance < 1000){
			distance_flag++;
		}
		
		if(distance_flag >= 10){
			GPIO_PinWrite(GPIO2, 29, 0U);
			delay_us(500000);
			distance_flag = 0;
		}
		else if(distance_flag < 10){
			GPIO_PinWrite(GPIO2, 29, 1U);
		}			
		PRINTF("%d\n",distance);					
	}
}

五. 小程序部分

腾讯云物联网平台提供了交互开发的功能,可以直接在腾讯连连小程序中开发标准面板,也可以自己写H5上传自定义面板,这里我使用了标准面板。标准面板在调试时非常方便,后期可以自制H5面板。

标准面板开发
标准面板开发
小程序面板
小程序面板

六. 活动总结

本着学习嵌入式操作系统参加了此次活动,有幸进入初赛获得EVB-AIoT开发板。通过这次活动我学习到了很多新的知识,也通过其他大佬的作品了解了很多之前不了解的技术和规范(比如在单片机部署AI模型、清晰的项目概况、分析问题的方法),对我未来的学习提供了丰富的资源。感谢TencentOS-Tiny团队和NXP提供的学习资料以及直播课程,让我从基本0基础学习了NXP RT系列单片机的开发以及TencentOS-Tiny的移植和使用。虽然活动中途出现了些小插曲(自己修核心板QAQ)没有做成最初设想的作品,但还是算基本完成了任务。

不积跬步无以至千里,通过这次活动初步了解了嵌入式操作系统,今后将继续深入学习TencentOS-Tiny。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 演示视频
  • PPT
  • 一. 设计背景
  • 二. 项目功能
    • 坐姿检测
      • 暗环境开灯提醒
        • 柔和调光
          • 小程序控制
          • 三. 硬件部分
            • EVB-AIoT 开发板
              • HC-SR04超声波传感器
                • 蜂鸣器模块
                  • BH1750环境光传感器
                    • ESP8266 WiFi模块
                    • 四. 软件部分
                      • mqttclient_task
                        • blink_task
                          • distance_task
                          • 五. 小程序部分
                          • 六. 活动总结
                          相关产品与服务
                          TencentOS Server
                          TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档