笔者无对应硬件开发板,对涉及硬件操作部分的代码不做全部展开。(不影响主线理解)
问题:服务模块如何获取真实环境信息?
外设简介
设备驱动开发基础
GPIO
- GPIO 即: General-Purpose Input/Output, 通用型输入输出
- 在硬件设备上,GPIO 通常表现为引脚 (Pin), 输出为高电平或低电平
- 程序设计中,可通过代码控制指定 GPIO 的输出,或接收外部输入
- GPIO 是硬件与外部设备的接口,常用于对外部设备进行控制
- GPIO 信号输出
当 GPIO 作为输出使用时,输出的电信号为高电平(1)或着低电平(0),因此,只要在电路上稍加设计就可以接入外设(如:LED,电动机,等),并通过程序控制外设的状态
GPIO 应用方式
基础功能
- 仅使用 GPIO 引脚功能对外输出控制信息(0 或 1)
复用功能
- 通过 GPIO 基础功能实现的通讯方式(如:I2C)
GPIO 基础功能示例
#include "iot_gpio.h"
#include "hi_io.h"
IoTGpioInit(14);
IoTGpioSetFunc(14, HI_IO_FUNC_GPIO_14_GPIO);
IoTGpioSetDir(14, HI_GPIO_DIR_OUT);
int Service_SetLight(int on)
{
return (IotGpioSetOutputVal(14, on) == 0);
}
什么是 I2C?
- I2C 即:inter - integrated Circuit, 一种两线式串行总线
- I2C 常用于链接微信控制器及其外围设备(如:用于连接传感器)
I2C 可通过两个 GPIO 引脚实现物理连接及数据通讯
- 如:
- GPIO0 对应 I2C_SDA : I2C 数据传输线
- GPIO1 对应 I2C_SCL : I2C 时钟信号线
深入浅出 I2C 通信
- I2C 总线上可以挂载一个设备和多个从设备
- 主设备负责调度总线,决定某个时间和其中一个从设备通讯
- 每个从设备在 I2C 总线上都有唯一的地址
- 主设备寻址时,8 位数据中高 7 位是从设备地址,最低位表示读写
- 每次数据通讯,主从设备之间都会发送起始和结束信号
大道至简:关于 I2C 应用的理解
- I2C 的本质是两根关于数据传输的连线(微控制器 <--> 传感器)
- I2C 编程是特殊的 GPIO 编程 (GPIO 配置后进行数据读写)
- 开发板上的 I2C 与集成外设固定连接(如:温湿度传感器)
- I2C 应用的终极表现只是简单的数据读写
I2C 应用示例
uint8_t send_data[1] = {0};
send_data[0] = 0x01;
IoTI2CWrite(1, (BH175_Addr<<1)|0x00, send_data, 1);
usleep(100000);
send_data[0] = 0x10;
IoTI2CWrite(1, (BH175_Addr<<1)|0x00, send_data, 1);
uin8_t recv_data[6] = {0};
IoTI2CRead(1, (BH175_Addr<<1)|0x01, recv_data, 2);
未来可做的扩展
- 提供更多不同类型的服务(如,图像采集与识别服务)
- 提供设备主动服务模式及服务联动模式
- 开发手机客户端,通过手机终端使用服务
- 。。。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。