笔者无对应硬件开发板,对涉及硬件操作部分的代码不做全部展开。(不影响主线理解)

问题:服务模块如何获取真实环境信息?

外设简介

image.png

设备驱动开发基础

  • 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);

未来可做的扩展

  • 提供更多不同类型的服务(如,图像采集与识别服务)
  • 提供设备主动服务模式及服务联动模式
  • 开发手机客户端,通过手机终端使用服务
  • 。。。

TianSong
737 声望139 粉丝

阿里山神木的种子在3000年前已经埋下,今天不过是看到当年注定的结果,为了未来的自己,今天就埋下一颗好种子吧