-
Notifications
You must be signed in to change notification settings - Fork 1.1k
基于AliOS Things Developer Kit开发板的外接传感器开发教程
- 开发板配置
- 代码下载
- 代码移植
- 功能调试
- 驱动代码提交
我们验证选用的开发板是基于STM32L496VGTx芯片研发的一款物联网开发板。其内核为ARM 32位Cortex-M4 CPU,最高80MHZ的主频率,1MB的闪存,320KB的SRAM,最多支持136个高速IO口,还支持SPI,CAN,I2C,I2S,USB,UART等常用的外设接口。
调试时,请使用右上角的USB1 ST_Link接口
单板的背面有arduino接口,当前验证使用的外接sensor主要基于I2C总线进行连接。 SCL以及SDA的高电平为3V
developer kit开发板环境配置请参考以下链接,建议采用一键式安装:
https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-Studio
代码下载前,请确认已在github注册账号,链接及注册流程如下:
为了便于后续的代码的审核提交,注册github账号时请使用本公司的邮箱
打开以下代码链接后,可以通过以下方式下载代码。首先选择代码分支;
安装了git bash的同学也可以通过命令行下载:git clone [email protected]:alibaba/AliOS-Things.git
也可以选择zip格式下载;
代码下载完成后,可按照以下patch修改代码,使其支持I2C3。
diff --git a/board/developerkit/Src/i2c.c b/board/developerkit/Src/i2c.c
index 90c860c2..fbd4a0c5 100644
--- a/board/developerkit/Src/i2c.c
+++ b/board/developerkit/Src/i2c.c
@@ -187,13 +187,20 @@ void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
PC0 ------> I2C3_SCL
PC1 ------> I2C3_SDA
*/
- GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
+ GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ GPIO_InitStruct.Pin = GPIO_PIN_9;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Alternate = GPIO_AF6_I2C3;
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
/* I2C3 clock enable */
__HAL_RCC_I2C3_CLK_ENABLE();
/* USER CODE BEGIN I2C3_MspInit 1 */
请参考以下链接完成uData架构下传感器驱动的移植:https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-uData-Sensor-Driver-Porting-Guide.zh
在developer kit板上,我们是通过外接I2C3连接传感器,需要注意的地方是总线配置,port口为3,从设备的地址为8bit:
i2c_dev_t ####_ctx = {
.port = 3, /*developer kit上外接I2C的port为3*/
.config.address_width = 8,
.config.dev_addr = BME280_I2C_ADDR, /* 从设备I2C地址,8bit */
};
如果需要在串口查看调试信息,则需要在udata_sample函数中,修改函数udata_sample中的订阅的传感器service类型(路径:example\uDataapp\uData-example.c);压力传感器如下所示:
int udata_sample(void)
{
int ret = 0;
aos_register_event_filter(EV_UDATA, uData_report_demo, NULL);
/*UDATA_SERVICE_BARO为压力传感器对应的service 类型*/
ret = uData_subscribe(UDATA_SERVICE_BARO);
if (ret != 0) {
LOG("%s %s %s %d\n", uDATA_STR, __func__, ERROR_LINE, __LINE__);
return -1;
}
return 0;
}
/*service 类型*/
typedef enum
{
UDATA_SERVICE_ACC = 0, /* Accelerometer */
UDATA_SERVICE_MAG, /* Magnetometer */
UDATA_SERVICE_GYRO, /* Gyroscope */
UDATA_SERVICE_ALS, /* Ambient light sensor */
UDATA_SERVICE_PS, /* Proximity */
UDATA_SERVICE_BARO, /* Barometer */
UDATA_SERVICE_TEMP, /* Temperature */
UDATA_SERVICE_UV, /* Ultraviolet */
UDATA_SERVICE_HUMI, /* Humidity */
UDATA_SERVICE_HALL, /* HALL sensor */
UDATA_SERVICE_HR, /* Heart Rate sensor */
UDATA_SERVICE_PEDOMETER,
UDATA_SERVICE_PDR,
UDATA_SERVICE_VDR,
UDATA_SERVICE_GPS,
UDATA_MAX_CNT,
}udata_type_e;
下面以developer kit板为例说明linkkit用例的调试过程。
example\uDataapp目录下已集成了相关的用例代码,2、3两个章节完成配置修改后,执行以下命令则可以编译用例 aos make udataapp@developerkit 编译完成后,生成的可执行文件为out\udataapp@developerkit\binary\[email protected]
本示例采用ST-LINK工具烧写bin文件,用户也可参考developer kit板环境配置说明中的其他方法;
通过串口连接单板(串口速率为115200) 烧录完成后,复位单板,开始运行;如果配置流程没有错误,则可以在串口看到sensor通过udata上报的数据。
其中物理传感器对应的服务类型,请参考结构体udata_type_e;
物理传感器的上报的数据单位,请参考以下链接中的《传感器数据单位》章节
https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-uData-Sensor-Driver-Porting-Guide.zh
如果功能测试完成无误,则可以参考以下链接中外部代码提交方式,向AliOS Things提交代码和入申请。
AliOS Things主干代码链接:https://github.com/alibaba/AliOS-Things
代码上传之前请确保已通过公司注册github账号。并完成SSH key认证,已完成则跳过5.1节。
在git bash下执行以下命令
ssh-keygen -t rsa -C "[email protected]"
[email protected]为自己注册github使用的公司邮箱
打开生成的SSH key文件id_rsa.pub,可以看到SSH key值如下所示
在github网站上添加该key值
添加成功后如下所示:
fork成功后,在可以在自己名下看到AliOS-Things的代码
git邮箱修改: git config user.email [email protected]
[email protected] -- github提交时显示的本公司邮箱
git用户名修改: git config user.name xxx
xxx -- github提交时显示的用户名
在git bash下通过以下命令下载自己分支的代码:
git clone [email protected]:yourname/AliOS-Things.git
yourname -- 即自己github账号的名字
每次代码上传之前,请同步AliOS-Things上master代码到自己名下的master,然后和入新增的sensor驱动文件。
修改完成后,通过以下命令上传代码到自己名下的master分支
查看修改后的文件: git status
添加要修改的文件信息到索引库: git add .
添加文件修改到本地库,并添加log,log中需要注明传感器的型号: git commit -m "add driver for sensor xxx" xxx为传感器型号
将修改推送到远程分支: git push origin master
在自己的代码路径下,点击“pull request”
通过以下链接签署CLA -- https://cla-assistant.io/alibaba/AliOS-Things
待CI运行成功后,由AliOS-Things团队和入到主干分支
上传代码流程也可参考该链接: https://github.com/alibaba/AliOS-Things/wiki/contributing.zh
由于当前认证的用例带有检测仪器,不适合开发者验证。因此建议从以下几个方面实现自检自测:
-
文件命名、函数命名、实现符合AliOS-Things下sensor驱动编程规范;
https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-Coding-Style-Guide
-
需要保证sensor可以成功初始化,uData上层服务可以能够正确读出数据,且数据单位与uData要求保持一致(如果有不合理的地方请提出);
如果有条件,可以验证一下精度,在5%以内;
-
对于带有self-test功能的sensor,建议实现self-test接口; 可参考函数drv_acc_bosch_bma253_self_test(代码目录:AliOS-Things-master\device\sensor\drv\drv_acc_bosch_bma253.c)
代码链接: https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-Coding-Style-Guide
/*
drv -- 类型: i2c_dev_t* 说明: 驱动参数;
data -- 类型: int32_t* 说明: self-test测试返回的offset值,可参考结构体dev_sensor_info_t;
返回值 -- 成功返回0;失败返回-1;
*/
static int drv_acc_bosch_bma253_self_test(i2c_dev_t* drv,int32_t* data);
/*并在相应sensor的ioctl函数中调用该接口*/
static int drv_acc_bosch_bma253_ioctl(int cmd, unsigned long arg)
{
int ret = 0;
dev_sensor_info_t *info = (dev_sensor_info_t *)arg;
switch(cmd){
case SENSOR_IOCTL_SELF_TEST:{
ret = drv_acc_bosch_bma253_self_test(&bma253_ctx, info->data);
printf("%d %d %d\n",info->data[0],info->data[1],info->data[2]);
return ret;
}
default:break;
}
return 0;
}
| Home | Tutorial | Hardware | Porting Guide | Utilities | API Reference | Technical Docs | Certification |
Crafted with ❤️ by AliOS Things Team.
- Quick Start
- Hello World
- Starter Kit Tutorial
- Developer Kit Tutorial
- AliOS Studio Tutorial
- Add a New Board Example
- Add a New Component Example
- Environment Setup
- SIG BLE Mesh Setup Guide
- BLE Tutorial
- LoRaWAN Tutorial
- Linkkit Tutorial
- LinkVoice Tutorial
- Hardware Setup
- WiFi Provisioning and Alink Certification
- Step by Step: MQTT to Cloud with STM32
- Video Tutorial