前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AIoT应用创新大赛-TencentOS Tiny AIoT开发板在智能轮椅中的应用

AIoT应用创新大赛-TencentOS Tiny AIoT开发板在智能轮椅中的应用

原创
作者头像
LinwCui
修改于 2022-03-22 07:17:58
修改于 2022-03-22 07:17:58
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

本文报告PDF版:

TencentOS-Tiny-AIoT开发板在智能轮椅中的应用.pdf

引言

首先非常荣幸能够参与这次比赛,也非常感谢大赛组织者的辛苦工作。

腾讯物联网操作系统(TencentOS tiny)是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,可裁剪等特性。TencentOS tiny提供了最精简的 RTOS 内核,内核组件可裁剪可配置,可灵活移植到多种终端 MCU上;基于RTOS内核提供了COAP/MQTT/TLS/DTLS等常用物联网协议栈及组件,方便用户快速接入腾讯云物联网通信IoT Hub;同时,为物联网终端厂家提供一站式软件解决方案,方便各种物联网设备快速接入腾讯云,可支撑智慧城市、智能穿戴、车联网等多种行业应用。本次比赛采用的AIoT开发板是腾讯 TencentOS 团队联合恩智浦半导体、厚德物联网设计了一款高性能 AIoT 评估板,可用于 TencentOS tiny 基础内核和 AIoT 应用功能体验和评估。

物联网以及万物互联是智慧城市、智能家居的基础和发展方向,借助物联网、智能硬件和腾讯云对传统轮椅进行改造,能够进一步提升轮椅的智能性和人机交互性能,当前使用的传统轮椅主要存在以下不足

(1)轮椅需求量大,轮椅作为老年人、残障人士的重要出行工具,医院的轮椅需求量也比较大,但使用时往往需要他人协助来保证安全,在感知、远程控制、人机交互方面存在不足;

(2)电动轮椅正在成为主流,智能化趋势显现,目前轮椅的研发多集中在中低端市场,对于高端电动轮椅存在研发能力不足、产品缺乏科技含量的问题;

(3)智能轮椅依靠其在感知、控制和人机交互方面的优势,不仅可供老年人、残障人士使用,还可作为新的交通方式供各年龄段人士的日常出行(智能代步车)。

智能轮椅具有庞大的市场,市场潜力巨大,因此本项目基于TencentOS tiny AIOT开发板研究了一款智能轮椅,在比赛中主要完成了以下内容

(1)在比赛过程中,本着体验和学习的态度,完成了摄像头、LCD显示屏、TencentOS tiny内核移植和腾讯云IoT Explorer对接功能的测试;

(2)结合目前实验室的智能轮椅项目,基于TencentOS tiny AIOT开发板、腾讯云平台和腾讯连连小程序研究了智能轮椅的远程控制和多模感知功能:

1、通过将开发板与腾讯云对接,实现了轮椅上云,并设计腾讯连连微信小程序;

2、智能轮椅控制:开发了轮椅脚踏板、靠背的升降控制和灯光控制;

3、智能轮椅多模感知:感知自身状态(姿态、定位、速度信息)的和外部环境(温度、湿度、灯光亮度);

进而,用户可以手机控制轮椅脚踏板、座椅靠背的升降,同时也可在小程序上查看轮椅的姿态、定位、速度信息和温湿度信息。

本项目的开发进一步提升了传统轮椅的交互性能、感知性能和远程控制能力,相信随着研究的深入,会拥有广阔的市场前景,推动轮椅智能化研究的进程。

1、项目背景

1.1 TencentOS tiny AIOT开发板开发板

本次大赛使用的开发板为TencentOS Tiny AIoT开发套件,这款开发板性能强大,可应用于物联网、人工智能等多种领域的开发,同时内置TencentOS Tiny开源物联网操作系统,例程等学习资料众多,对于初学者非常友好。

开发板主要有以下特性:

1、核心板采用的RT1062处理器属于i.MX RT 系列 MCU,是由 NXP 推出的跨界处理器,跨界是指该系列MCU的定位既非传统的微控制器、也非传统的微处理器,i.MX RT 系列 MCU 则综合了两者的优势,既具备高频率(最高主频600M)、高处理性能,也具备中断响应迅速、实时性高的特点。

2、1M RAM 16M SDRAM 64MB qspi flash 128MB spi flash

3、板载Type-C接口CMSIS DAP仿真器。

4、板载PCIE接口,可扩展4G类物联网模组。

5、板载物联网俱乐部WAN Interface接口,可支持NB-IoT、WiFi、4G cat1、LoRa等模组。

6、板载物联网俱乐部E53 Interface接口,可扩展全系E53传感器。

7、板载标准24P DVP摄像头接口,可支持最高500万像素摄像头。

8、板载RGB显示接口,可转换HDMI输出。

9、板载高性能音频解码芯片,可做语音识别测试。

10、预留SD卡、用户按键、SPI Flash。

图1.1 开发板实物图
图1.1 开发板实物图

1.2 智能轮椅介绍

近几年来,智慧城市、物联网技术发展迅速,相关的感知硬件也得以快速发展,通过应用摄像头、毫米波雷达、超声波雷达、激光雷达等智能硬件,设备也变得更加智能,人机交互性能得到了进一步的提高。

图1.2 智能传感器及其应用
图1.2 智能传感器及其应用

当前人口老龄化问题日益严重,在全球人口中残疾人患者约占15%,其中约有2.85 亿例视力受损或失明患者,轮椅成为了满足其日常出行的必要工具,但传统轮椅不具备智能控制、物体感知、自主导航等功能,人机交互性能也不足。相比传统轮椅,智能轮椅上安装了测距、雷达、摄像头等传感器,感知性能更强;同时借助云技术,可以通过手机主动调整轮椅的姿态、运动状态等功能,是轮椅的未来发展方向。

如下图为传统轮椅和智能轮椅:

图1.3 传统轮椅和智能轮椅
图1.3 传统轮椅和智能轮椅

在参与比赛的过程中,基于实验室目前的轮椅项目进行了作品的开发。传统轮椅的脚踏板、靠背无法移动,存在使用不便的缺点,因此借助腾讯云、腾讯连连小程序和AIOT开发板完成了脚踏板、靠背的远程控制功能以及轮椅对自身状态和环境的感知功能。

2、项目设计

2.1 项目架构设计

项目开展了轮椅远程控制轮椅多模感知轮椅上云微信/APP小程序设计四个方面的研究,以实现以下功能:

1、通过将开发板与腾讯云对接,实现了轮椅上云,并设计腾讯连连微信/APP小程序;

2、智能轮椅控制:开发了轮椅脚踏板、靠背的升降控制和灯光控制;

3、智能轮椅多模感知:自身状态(姿态、定位、速度)的和外部环境(温度、湿度、灯光亮度);

为实现上述功能,项目设计了如图2.1所示的架构,主要包括以下几部分:

(1)远程端:包括腾讯云平台和腾讯连连微信小程序,在小程序上可以控制轮椅脚踏板、靠背的升降和灯光的开关,还可查看轮椅的姿态角、定位、速度信息,以及温度、湿度和光照强度信息;

(2)主控层,采用AIOT开发套件,用于向LED灯珠和2个电机驱动板发送控制指令、获取传感器采集的感知数据,另外板载了WIFI模块,用于对接腾讯云;

(3)收发层,搭建传感器与主控制板的通信链路;

(4)感知层,采集姿态角、定位、速度、温度、湿度和光照强度数据;

(5)驱动层:包括电机驱动模块和LED灯珠,用于驱动脚踏板和靠背上的四个电动推杆、控制LED灯珠的亮灭;

另外,系统还配备了电源模块,产生24V电源,为系统供电。

图2.1 智能轮椅架构
图2.1 智能轮椅架构

AIOT开发板上板载了E53接口,包括IIC、SPI、串口以及普通IO口等,可以外接自己的传感器,在使用时利用恩智浦的MCUXpresso IDE生成对应的驱动程序即可进行开发。轮椅的控制和感知采用了E53接口,结构如图2.2所示,其中E53引出的GPIO1-4用于控制驱动板和LED灯珠;E53的串口外接了数据采集板,数据采集板获取到姿态角、定位、速度和温湿度信息后通过串口发送到AIOT开发板;E53的IIC接口用于采集BH1750光照传感器的亮度信息。

图2.1 E53接口
图2.1 E53接口

2.2 轮椅实物及电路模块

如下图为轮椅实物图,分别为轮椅的侧视图、俯视图、AIOT开发板及外围电路、传感器模组和轮椅正视图。

图2.3 轮椅实物图
图2.3 轮椅实物图

2.3 作品创新点

本作品的研究主要有以下创新点

(1)本项目结合TencentOS tinyAIOT开发板、腾讯云平台和腾讯连连小程序,创新研究了轮椅的远程控制、多模感知和人机交互技术,实现了物联网轮椅的设计,是对传统轮椅的智能化提升;

(2)现有轮椅的脚踏板和靠背控制多采用遥控器,需要随身携带,通过本作品,仅需一个手机即可完成控制和轮椅状态监控工作。

2.4 作品商业价值分析

(1)研发角度:

从传统轮椅企业发展的情况来看,当前轮椅的研究多数聚焦于中低端轮椅市场,在高端电动轮椅、运动轮椅以及智能轮椅上的研发能力不足,产品缺乏科技含量

另外本项目来源于国家重点研发计划项目,相关研究是对中高端轮椅市场的补充,有助于推动智能轮椅的发展。

(2)老年人、残障使用者角度:

轮椅可作为老年人、残障人士日常生活的重要工具,但轮椅市场的需求还远远未得到满足。根据国家辅具研究中心的数据显示,我国轮椅的实际适配比例仅为10%左右。

另外,老人的需求也在加快升级,传统轮椅在功能和设计上也存在许多痛点,难以跟上用户日渐升级的需求,伴随着新一代智能代步车的出现,传统轮椅将迎来一场巨大的变局。轮椅市场面临重塑,技术的升级则打开了轮椅的想象空间。

图2.4 轮椅需求量(资料来源:中国老龄协会IBISWord前瞻产业研究院)
图2.4 轮椅需求量(资料来源:中国老龄协会IBISWord前瞻产业研究院)

(3)医院轮椅需求大:

医院对智能轮椅的需求,随着人口老龄化程度的加深以及我国康复医学的发展,结合中国医疗卫生机构康复医学科门急诊人次10.2%的复合增长速度,预计医院对轮椅的需求也将保持10%的复合增长速度。预计到2026年,我国医院对轮椅的需求量将达到136.4万辆左右。

图2.4 医院轮椅需求量(资料来源:中国老龄协会IBISWord前瞻产业研究院)
图2.4 医院轮椅需求量(资料来源:中国老龄协会IBISWord前瞻产业研究院)

3、智能轮椅控制

3.1 控制方案设计

轮椅控制部分包括轮椅脚踏板、靠背和LED的控制,采用AIOT开发板的E53接口引出的GPIO1-GPIO4发出控制信号,结构如图3.1所示,具体包括以下:

(1)开发板的GPIO2输出高、低电平控制LED灯珠的亮灭;

(2)开发板的GPIO1和GPIO3连接到电机驱动板1,驱动脚踏板部分的两个电动推杆,以实现脚踏板的升降;

(3)开发板的GPIO2和GPIO4连接到电机驱动板2,驱动靠背部分的两个电动推杆,以实现靠背的升降;

(4)开发板上云,接收来自手机小程序的控制指令。

图3.1 轮椅控制结构
图3.1 轮椅控制结构

3.2 轮椅靠背、脚踏板控制

3.2.1 硬件部分

为了控制轮椅脚踏板和靠背的升起和降落,在轮椅的两个脚踏板和靠背处放置了4个电动推杆,如下图所示,电动推杆采用了直流有刷电机,提供0-24V电压即可控制推杆的升起和降落。

如图3.2为电动推杆和安装图。

图3.2 靠背和脚踏板上的电动推杆
图3.2 靠背和脚踏板上的电动推杆

项目采用了如下图所示的单路电机驱动板,对驱动板的IN1和IN2提供提供控制信号可以控制电机正转、反转和刹车,对PWM口输入不同占空比的方波可以控制电机的转速。另外,在项目开发时,为保证脚踏板和靠背控制的同步性,靠背和两个脚踏板的电动推杆均连接到同一个电机驱动板。

图3.3 电机驱动板接线图和控制信号
图3.3 电机驱动板接线图和控制信号

电机驱动板需要提供9-36V的电压来驱动电动推杆,因此采用了24V开关电源,如下图所示,可输出24V 4.5A的电压。

图3.6 系统电源模块
图3.6 系统电源模块

3.2.2 软件设计

为了控制推杆电机和靠背电机,采用了AIOT开发板板载E53模块的GPIO1-4实现电机方向的控制,方向控制如下表所示:

表3-1 电平控制信号
表3-1 电平控制信号

IO初始化程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* GPIO configuration on GPIO_B1_15 (pin B14) */
 gpio_pin_config_t gpio2_pinB14_config = {
 .direction = kGPIO_DigitalOutput,
 .outputLogic = 0U,
 .interruptMode = kGPIO_NoIntmode
 };
 /* Initialize GPIO functionality on GPIO_B1_15 (pin B14) */
 GPIO_PinInit(GPIO2, 31U, &gpio2_pinB14_config);//GPIO2
 GPIO_PinInit(GPIO2, 30U, &gpio2_pinB14_config);//GPIO3
 GPIO_PinInit(GPIO3, 17U, &gpio2_pinB14_config);//GPIO1
 GPIO_PinInit(GPIO3, 4U, &gpio2_pinB14_config);//GPIO4
 IOMUXC_SetPinMux(IOMUXC_GPIO_B1_15_GPIO2_IO31, 0U);//GPIO2
 IOMUXC_SetPinMux(IOMUXC_GPIO_B1_14_GPIO2_IO30, 0U);//GPIO3
 IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO17, 0U);//GPIO1
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO4, 0U);//GPIO1

开发板接收到微信小程序的控制指令后IO口的输出程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if(cjson_switch != NULL){ //靠背降下
     power_switch = cjson_switch->valueint;
     if (power_switch == 0) {
     GPIO_PinWrite(GPIO2, 31, 0);
     } else if (power_switch == 1) {
     GPIO_PinWrite(GPIO2, 31, 1);
     }
 }
else if(cjson_switch_jiao != NULL){ //脚踏板升起
     tuigan_jiao_switch = cjson_switch_jiao->valueint;
      if (tuigan_jiao_switch == 0) {
     GPIO_PinWrite(GPIO2, 30, 0);
     } else if (tuigan_jiao_switch == 1) {
     GPIO_PinWrite(GPIO2, 30, 1);
     }
}
else if(cjson_switch_jiao_down != NULL){ //脚踏板降下
     tuigan_jiao_down_switch = cjson_switch_jiao_down->valueint;
     if (tuigan_jiao_down_switch == 0) {
     GPIO_PinWrite(GPIO3, 17, 0);
     } else if (tuigan_jiao_down_switch == 1) {
     GPIO_PinWrite(GPIO3, 17, 1);
     }
}
else if(cjson_switch_bei != NULL){ //靠背升起
     tuigan_bei_switch = cjson_switch_bei->valueint;
     if (tuigan_bei_switch == 0) {
     GPIO_PinWrite(GPIO3, 4, 0);
     } else if (tuigan_bei_switch == 1) {
     GPIO_PinWrite(GPIO3, 4, 1);
     }
}

3.3 轮椅灯光控制

轮椅灯光的控制采用图3.7的LED灯珠,在使用时设置IO口为输出模式,然后控制IO口电平的高低即可控制其亮灭。

图3.7 LED灯珠
图3.7 LED灯珠

4、智能轮椅多模感知

4.1 多模感知方案-自身感知与环境感知

项目基于AIOT开发板研究了智能轮椅的多模感知,包括对自身自身状态的感知和对环境的感知,并通过手机小程序进行查看。结构图如图4.1所示,包括以下几部分:

(1)自身感知:

1、定位信息感知:采用ATK S1216F8 BD GPS/北斗模块,采集轮椅的定位信息(经、纬度)和移动速度;

2、姿态信息感知:采用ATK-MPU6050六轴传感器,采集轮椅的姿态角(俯仰角pitch,偏航角yaw和翻滚角roll);

(2)外部环境感知:

1、温度、湿度感知:采用DHT11传感器,输出轮椅所在环境的温湿度;

2、光照强度感知:采用BH1750传感器,输出轮椅所在环境的光强;

(3)开发板上云,在小程序上查看感知上报数据。

图4.1 多模感知结构图
图4.1 多模感知结构图

4.2 数据采集板介绍与通信协议设计

为了简便系统设计,在开发的时候采用了数据采集板(Cortex-M3),在采集完MPU6050、GPS和DHT11传感器的数据后,采集板通过串口2发送数据,AIOT开发板通过E53模块的串口5接收数据并处理。

数据协议如下图所示:

图4.2一帧感知数据的结构
图4.2一帧感知数据的结构

数据采集板端按照上述协议封装数据的函数如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//串口2发送1个字符 //c:要发送的字符
void usart2_send_char(u8 c)
{  
 while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕 
 USART_SendData(USART2,c); 
} 
//fun:功能字. 0XA0~0XAF//data:数据缓存区//len:data区有效数据个数
void usart2_niming_report(u8 fun,u8*data,u8 len)
{
 u8 send_buf[64];
 u8 i;
 send_buf[len+3]=0; //校验数置零
 send_buf[0]=0X88; //帧头
 send_buf[1]=fun; //功能字
 send_buf[2]=len; //数据长度
 for(i=0;i<len;i++)send_buf[3+i]=data[i]; //复制数据
 for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i]; //计算校验和 
 for(i=0;i<len+4;i++)usart2_send_char(send_buf[i]); //发送数据到串口1 
}

AIOT开发板利用串口5接收数据,数据存储在rx_buff数组中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void LPUART5_IRQHandler(void){
 /* If new data arrived. */
 int i=0;
 if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(LPUART5)){
 data = LPUART_ReadByte(LPUART5);
 if(len<19){
  rx_buff[len++]=data;
  if(rx_buff[0]!=0x88)
  len=0;
 }
 else if(len>=19)
  len=0;
 }
 SDK_ISR_EXIT_BARRIER;
}

4.3 自身状态感知

轮椅自身状态的感知包括姿态角信息、定位信息和速度信息,接下来对各个模块的开发过程进行介绍。

4.3.1 姿态信息感知

在轮椅移动过程中,采用正点原子的ATK-MPU6050六轴传感器模块采集轮椅的实时姿态角信息,传感器如下图所示:

图4.3 ATK-MPU6050六轴传感器模块实物图
图4.3 ATK-MPU6050六轴传感器模块实物图

ATK-MPU6050 模块具有体积小、自带 DMP、自带温度传感器、支持IIC从机地址设置和中断、兼容3.3V/5V系统、使用方便等特点,基本特性如下图所示。模块仅通过一个IIC接口与外部通信,并可以通过MPU_AD0设置模块的IIC地址,当MPU_AD0悬空接GND的时候,模块的IIC从机地址为:0X68;当MPU_AD0接VCC的时候,模块的IIC从机地址为:0X69。

图4.4 ATK-MPU6050六轴传感器特性
图4.4 ATK-MPU6050六轴传感器特性

获取姿态角的程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//pitch:俯仰角 精度:0.1°   范围:-90.0° <---> +90.0°
//roll:横滚角  精度:0.1°   范围:-180.0°<---> +180.0°
//yaw:航向角   精度:0.1°   范围:-180.0°<---> +180.0°
u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)
{
	float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;
	unsigned long sensor_timestamp;
	short gyro[3], accel[3], sensors;
	unsigned char more;
	long quat[4]; 
	if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;	 
	if(sensors&INV_WXYZ_QUAT) 
	{
		q0 = quat[0] / q30;	//q30格式转换为浮点数
		q1 = quat[1] / q30;
		q2 = quat[2] / q30;
		q3 = quat[3] / q30; 
		//计算得到俯仰角/横滚角/航向角
		*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3;	// pitch
		*roll  = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3;	// roll
		*yaw   = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3;	//yaw
	}else return 2;
	return 0;
}

4.3.2 定位信息、速度信息感知

项目采用正点原子的ATK-S1216F8 BD GPS北斗模块采集轮椅的经纬度定位信息和移动速度,模块如下图所示:

图4.5 ATK-S1216F8 BD GPS北斗模块和有源天线
图4.5 ATK-S1216F8 BD GPS北斗模块和有源天线

模块特性如下图所示,该模块能够通过串口输出NMEA 0183协议的定位数据,包括经度、纬度、UTC时间、速度、可见GPS/北斗卫星数量等信息。

图4.6 模块特性
图4.6 模块特性

数据采集板通过串口4接收到传感器数据后,将数据存放在USART1_TX_BUF数组中,然后利用GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF)函数分析字符串,并将模块提供的信息存储到gpsx数据结构中,在使用时读取该结构的数据即可。

4.4 外部环境感知

轮椅在移动过程中,还需要对外部环境进行感知,项目结合温湿度传感器和光照传感器开发了轮椅的外部感知功能。

4.4.1 温度、湿度感知

温度、湿度数据采集采用DHT11传感器,该传感器采用单总线数据格式发送数据,数据格式为8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和,

图4.7 DHT11温湿度传感器及数据传输
图4.7 DHT11温湿度传感器及数据传输

用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。

数据结构定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef struct _DHT11
{
	char Tem_H;		//温度整数部分
	char Tem_L;		//温度小数部分
	char Hum_H;		//湿度整数部分
	char Hum_L;		//湿度小数部分
}DHT11_TypeDef;
int DHT11_GetTem(void)//获取温度
{
	return (DHT11.Tem_H << 8 | DHT11.Tem_L);
}
int DHT11_GetHum(void)//获取湿度
{
	return (DHT11.Hum_H << 8 | DHT11.Hum_L);
}

4.4.2 光照强度感知

轮椅外部环境的光照强度感知采用AIOT开发板板载的BH1750传感器,该传感器是一种用于两线式串行总线接口的数字型光强度传感器,具有接近视觉灵敏度的光谱灵敏度特性,利用它的高分辨率可以探测较大范围的光强度变化。传感器内置16bit AD转换器,可对亮度进行1勒克斯的高精度测定。

图4.8 BH1750传感器
图4.8 BH1750传感器

读取传感器数据的程序如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static int bh1750_read_dat(uint8_t* dat)
{
    status_t reVal = kStatus_Fail;
    if (kStatus_Success != LPI2C_MasterStart(BH1750_I2C_MASTER, BH1750_DEVICE_ADDR_7BIT, kLPI2C_Read)) {
        return -1;
    }
    reVal = LPI2C_MasterReceive(BH1750_I2C_MASTER, dat, 2);
    if (reVal != kStatus_Success)
    {
        if (reVal == kStatus_LPI2C_Nak)
        {
            LPI2C_MasterStop(BH1750_I2C_MASTER);
        }
        return -1;
    }
    reVal = LPI2C_MasterStop(BH1750_I2C_MASTER);
    if (reVal != kStatus_Success)
    {
        return -1;
    }
    return 0;
}

5、轮椅数据上云与腾讯连连小程序

5.1 轮椅上云方案

腾讯云物联网开发平台为设备上云提供了一站式服务,开发者根据自己的开发需求在平台上设计设备模型,从而轻松实现设备数据上云、读取云下发的数据。为了实现设备与物联网开发平台的交互,采用了板载的ESP8266 WIFI模块,该模块是由乐鑫公司出品的一款物联网芯片,因为价格较低,性能稳定等收到很大关注,可工作于三种种模式下,分别是:AP模式,station模式以及混合模式,通过常用的AT指令进行控制。

如图5.1为WIFI模块以及上云流程。

图5.1 ESP8266 WIFI模块及上云方案
图5.1 ESP8266 WIFI模块及上云方案

5.2 物联网开发平台及微信/APP小程序设计

为了实现轮椅与小程序的交互,项目基于腾讯云物联网开发平台和腾讯连连设计了可在微信和腾讯连连APP上使用的小程序。物联网开发平台网址为https://console.cloud.tencent.com/iotexplorer,参考https://github.com/OpenAtomFoundation/TencentOS-tiny/blob/master/doc/30.TencentOS_Tiny_EVB_ AIoT_QuickStart.md

本项目的小程序开发采用下述流程:

(1)物模型设计,包括:

控制部分:轮椅脚踏板的升、降,靠背的升、降,灯珠的亮、灭;

感知部分:亮度、温度、湿度、经度、纬度、速度、俯仰角、翻滚角和偏航角;

另外,还包括计数器功能,从而用户在小程序中按下对应的按钮,即可发布带有对应标识符的控制信息、订阅数据。

图5.2 物模型设计
图5.2 物模型设计

(2)交互开发,设计小程序界面

可以直接使用模板,也可以进行H5开发设计小程序界面,基于模板调整了元素的布局,保证了美观和可读性。

图5.3 交互开发
图5.3 交互开发

(3)设备调试,点击设备名称(dev01)可以进入设备界面,可以看到设备名称、设备密钥和产品ID,进而利用python脚本mqtt_config_gen.py,一次输入产品ID、设备名称、设备密钥,就可以生成对用的mqtt信息。

图5.4 设备调试
图5.4 设备调试

(4)完成后使用腾讯连连小程序扫描设备二维码可以在微信小程序上看到图5.5左图的界面,另外如果使用腾讯连连APP可以看到图5.5右图的画面。

图5.5 微信/APP小程序
图5.5 微信/APP小程序

6、基于TencentOS tiny MDK软件包的移植功能

在移植TencentOS tiny到keil工程时,需要从github下载TencentOS tiny,然后逐个文件夹进行复制,并在工程中添加头文件和源文件,操作相对来说比较繁琐,作者在21年暑假制作了TencentOS tiny的MDK软件包,能够以安装的方式将TencentOS tiny移植到Keil上,比较方便,相关内容在链接https://cloud.tencent.com/developer/article/1934891(AIoT应用创新大赛-使用MDK软件包移植TencentOS tiny)

7、项目测试

在完成设计后,进行了实验,如下为成果视频:

智能轮椅 - 云+社区 - 腾讯云 (tencent.com)

下图为调试过程中串口助手的界面,可以看到上报、下发数据,以及数据采集板采集的数据:

图7.1 串口助手界面
图7.1 串口助手界面

在腾讯云物联网平台上可以看到设备详细的上行、下行信息:

图7.2 腾讯云物联网平台
图7.2 腾讯云物联网平台

在小程序上也能看到设备持续上报的信息,发送指令等:

图7.3 APP界面
图7.3 APP界面

8、总结、展望

通过这次比赛,我学习了TencentOS tiny物联网操作系统搭配物联网开发板的使用,包括任务的配置、调度等,同时也是在参加完飞思卡尔智能车竞赛后又一次使用恩智浦的芯片进行项目开发,对于我来说收获是巨大的,这包括项目开发能力、学习能力、表达能力等。

在这次比赛中,我结合实验室正在做的项目,设计了系统功能架构,在学习了腾讯连连小程序设计、设备上云和AIOT开发板使用后,我完成了智能轮椅的远程控制和多模感知功能,轮椅的使用者可以在手机上轻松控制轮椅的脚踏板、靠背和灯光,还可以看到轮椅自身的定位、速度、姿态信息,以及外部的温度、湿度和光照强度。

相信结合物联网进行轮椅的开发,会使轮椅的控制便捷性、可视化水平和人机交互能力得到进一步的提升,在接下来,还可以结合激光雷达、摄像头等模块提高轮椅的智能性,方便轮椅使用者的监护人进一步掌握轮椅的安全状态、下发紧急控制指令等。

附件:PPT照片

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
深入刨析字符乱码
一.背景 在日常Ulink活动跟进过程中,有时活动页面打开的时候会遇到乱码的情况(如下图所示),于是就想乱码到底是怎么产生的,遇到乱码的情况应该怎么去解决,带着这些问题,我去查阅了相关的资料,在这里整理成文章分享给大家,希望对大家有所帮助。 二.乱码产生的原因 我们都知道,计算机是只认识0和1的二进制数的,所以不管是字母,汉字,或者符号,都是以某种编码方式转换成二进制数据存放在计算机中,需要显示的时候,就用相同的编码方式把二进制数据解码出来就可以了。那么这就很好理解乱码的产生了,如果我们用A编码方式将
腾讯VTeam技术团队
2020/11/10
8780
数据读写API——IO流
IO指的是Input和Output,主要目的是实现数据在存储介质之间的传输。【流:数据流,类比与水流的流动】
Noneplus
2019/09/24
6460
数据读写API——IO流
常见乱码问题分析
在字符集这一篇文章中,我们基本了解了字符集的一些概念,也知道了什么是编码,什么是编码什么是解码。那么接下来我们就聊聊乱码。
@阿诚
2020/09/01
1.5K0
常见乱码问题分析
关于编码的那些事
之前做一个POC的时候,Vicky同学遇到一个关于编码的问题,问到我,我觉得当时没有解释得很清楚,于是决定查阅相关的资料文档,写一篇文章,记录这个问题及对背后的原因、原理的理解。
Bruce Li
2019/07/30
7760
关于编码的那些事
Python2中的中文字符编解码浅析
自动化测试过程中,输入文本、读取文件、解析网络请求、字符串断言、正则匹配这些步骤都是必不可少的。而Python是测试过程中最为常用的语言之一,很多测试团队的自动化代码和用例都是使用Python语言开发和维护的。 由于Python在最初发布时,Unicode标准还没有完成,所以一直以来Python对Unicode的支持并不完全,而ASCII编码支持的字符有限。因此在涉及到中文的自动化用例中,经常会遇到中文字符编解码的各种各样的异常。本文从文字编码的历史讲起,抛砖引玉,浅析了Python2.x版本中文字处理的原
腾讯移动品质中心TMQ
2018/02/08
1.6K0
Python2中的中文字符编解码浅析
字符集和字符编码
我们都知道在计算机内部,所有的数据在存储和运算的时候都应该使用二进制进行表示。例如字母,数字等等。通过二进制进行表示,我们可以指定很多规则来表示这些字符,为了避免不一致性,美国国家标准学会(American National Standard Institute , ANSI )制定了 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)编码。
用户7657330
2020/08/14
1.2K0
建议收藏,彻底搞懂字符编码问题,从此告别中文乱码
字符编码是计算机技术的基石,本文希望帮助大家彻底梳理清楚字符编码问题,不仅知其然,还知其所以然,摆脱被中文乱码支配的感觉。
业余草
2019/12/20
1.6K0
建议收藏,彻底搞懂字符编码问题,从此告别中文乱码
老是遇到乱码问题:它是如何产生的,又如何解决呢?
中文乱码问题在我们日常开发中司空见惯,那么乱码问题是如何产生的呢?又怎样去解决乱码问题呢?本文将结合基本概念和例子展开阐述,希望大家有收获。
捡田螺的小男孩
2020/04/15
1.1K0
老是遇到乱码问题:它是如何产生的,又如何解决呢?
《Java从入门到失业》第三章:基础语法及基本程序结构(3.6):基本数据类型及字符集编码(字符编码和char型)
       咦?怎么好像有东西乱入了?不是讲基本数据类型么?哈哈,因为还剩下最后一个char型了,因为char型会牵涉到Unicode编码相关,因此我决定先科普一下字符集编码。
用户7801119
2020/09/27
7790
java中byte, iso-8859-1, UTF-8,乱码的根源
Post@https://ryan-miao.github.io 测试代码https://github.com/Ryan-Miao/someTest/commit/50241e50d4b6ecdb8820e58f4cb9628bfb7d77ec 背景 还是多语言, 在项目中遇到本地环境和服务端环境不一致乱码的情形。因此需要搞清楚乱码产生的过程,来分析原因。 获取多语言代码如下: private Map<String, String> getLocalizationContent(Locale locale
Ryan-Miao
2018/03/13
3.2K0
java中byte, iso-8859-1, UTF-8,乱码的根源
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
这就是为什么我们在浏览器的地址栏中能看到中文,但是把地址拷贝出来后中文就变成了一些奇怪的串了。
谭庆波
2018/08/10
4.8K0
一篇文章帮你解决中文乱码问题---JavaWeb中文编码问题全面解析
计算机基础篇 | 一看就懂的字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码问题
做通信的时候,或者使用IO流读写数据的时候脑袋总是晕晕乎乎的。 与计算机打交道久了,不可避免会看到“鬼画符”式的乱码,让人云里雾里的,特别烦人。
烟雨平生
2023/10/20
6K0
计算机基础篇 | 一看就懂的字符集、ASCII、GBK、UTF-8、Unicode、乱码、字符编码问题
一文打通计算机字符编码
字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节 表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码, 以便计算机能 够识别和存储各种文字
一个风轻云淡
2023/09/24
2910
《面试季》高频面试题-编码,乱码知识
  在编码的江湖中,"乱码"算得上我们遇到的最难缠的"敌人"之一,一旦遇上、轻则心情烦躁、重则心态崩溃。文章开头,让我们再次重温与"乱码"初见面的名场面。
IT学习日记
2022/09/13
6160
《面试季》高频面试题-编码,乱码知识
各种编码格式,你懂得!!!
GBK,ISO-8859-1,GB2312的本质区别 编码有几种 ,计算机最初是在美国等国家发明的 所以表示字符只有简单的几个字母只要对字母进行编码就好 我们标准码 iso-8859-1 这就是一个标准 但是后来计算机普及了 于是就中国要使用计算机了 但是机器不认得中文,于是就有了国际码。 gbk gb2312都是这类。两个其实一个,一个是标准(发布的代号),一个是简称。后来多了个阿拉伯语、日语、韩语......所以就出来统一编码UniCode ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。此字符集主要支持欧洲使用的语言。
李才哥
2019/07/10
11.2K0
各种编码格式,你懂得!!!
计算机是如何存储数据的?
理清ASCII、Unicode、GBK、UTF-8编码之间的关系 - 织梦笔记 (dedenotes.com)
小小范
2021/12/07
2.5K0
计算机是如何存储数据的?
Java---IO加强(3)-IO流的操作规律
源:InputStream Reader 一定是被读取的。 目的:OutputStream Writer 一定是被写入的。
谙忆
2021/01/21
3420
Java Web中的中文编码问题分析
在计算机中存储信息的最小单位是1个字节,即8bit,所以能标识的最大字符范围是0~255,而人类自然语言中例如汉语、日语要表示的符号太多,无法单纯用一个字节来完全表示,为了解决这个矛盾必须要有一个新的人类可识别的数据存储结构字符,而从char到byte必须编码。
张哥编程
2024/12/19
1840
Java Web中的中文编码问题分析
JDK1.9-转换流
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
5860
JDK1.9-转换流
再再谈java乱码:GBK和UTF-8互转尾部乱码问题分析(续)
在《再谈java乱码:GBK和UTF-8互转尾部乱码问题分析》我们分析了,如果从一个UTF-8 的字节序列,经过 new String(b,"GBK") 的操作,"可能"(与总字节数有关)会破坏数据。结果可能是,损失最后一个"字"。
pollyduan
2019/11/04
2.4K0
推荐阅读
相关推荐
深入刨析字符乱码
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 引言
  • 1、项目背景
    • 1.1 TencentOS tiny AIOT开发板开发板
    • 1.2 智能轮椅介绍
  • 2、项目设计
    • 2.1 项目架构设计
    • 2.2 轮椅实物及电路模块
    • 2.3 作品创新点
    • 2.4 作品商业价值分析
  • 3、智能轮椅控制
    • 3.1 控制方案设计
    • 3.2 轮椅靠背、脚踏板控制
      • 3.2.1 硬件部分
      • 3.2.2 软件设计
    • 3.3 轮椅灯光控制
  • 4、智能轮椅多模感知
    • 4.1 多模感知方案-自身感知与环境感知
    • 4.2 数据采集板介绍与通信协议设计
    • 4.3 自身状态感知
      • 4.3.1 姿态信息感知
      • 4.3.2 定位信息、速度信息感知
    • 4.4 外部环境感知
      • 4.4.1 温度、湿度感知
      • 4.4.2 光照强度感知
  • 5、轮椅数据上云与腾讯连连小程序
    • 5.1 轮椅上云方案
    • 5.2 物联网开发平台及微信/APP小程序设计
  • 6、基于TencentOS tiny MDK软件包的移植功能
  • 7、项目测试
  • 8、总结、展望
  • 附件:PPT照片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档