当前位置: 首页 > wzjs >正文

专业的网络公司有哪些青岛百度seo

专业的网络公司有哪些,青岛百度seo,营销型网站建设的利与弊,佛山网站建设服务公司前言 由于NXP官方提供的BSP里已经包含了其片上I2C控制器的驱动并接入到了Linux的I2C子系统,所以我们可以直接去写与I2C有关的应用程序了。 在本篇博文中我们用两种方式对I2C设备AP3216C进行读写操作。 第一种:直接利用Linux的I2C子系统对I2C设备AP3216…

前言

由于NXP官方提供的BSP里已经包含了其片上I2C控制器的驱动并接入到了Linux的I2C子系统,所以我们可以直接去写与I2C有关的应用程序了。
在本篇博文中我们用两种方式对I2C设备AP3216C进行读写操作。

第一种:直接利用Linux的I2C子系统对I2C设备AP3216C进行读写操作。

第二种:利用i2c-tools工具集对I2C设备AP3216C进行读写操作,当然i2c-tools也是运行于Linux的I2C子系统基础上的用户空间工具集,之前已经介绍过它了,并且之前已经用它的命令行对I2C设备AP3216C进行过读写操作了,详情见: https://blog.csdn.net/wenhao_ir/article/details/146319007

在阅读本文前建议还是先将博文 https://blog.csdn.net/wenhao_ir/article/details/146319007 阅读一遍。

直接利用Linux的I2C子系统对I2C设备AP3216C进行读写操作

完整代码(I2C_direct_control_ATP2126C.c)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <errno.h>#define I2C_BUS "/dev/i2c-0"  // I2C 设备文件
#define I2C_ADDR 0x1E  // AP3216C 设备地址// 写入 I2C 设备寄存器
void i2c_write(int fd, unsigned char reg, unsigned char value) {unsigned char buf[2] = {reg, value};if (write(fd, buf, 2) != 2) {perror("Failed to write to I2C device");exit(EXIT_FAILURE);}
}// 读取 I2C 设备寄存器(16位数据)
int i2c_read_word(int fd, unsigned char reg) {unsigned char buf[2];if (write(fd, &reg, 1) != 1) {perror("Failed to set register address");exit(EXIT_FAILURE);}if (read(fd, buf, 2) != 2) {perror("Failed to read from I2C device");exit(EXIT_FAILURE);}return buf[0] | (buf[1] << 8);  // 低字节在前,高字节在后
}int main() {int fd = open(I2C_BUS, O_RDWR);if (fd < 0) {perror("Failed to open I2C bus");return EXIT_FAILURE;}if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {perror("Failed to select I2C device");return EXIT_FAILURE;}// 1. 软复位 AP3216Ci2c_write(fd, 0x00, 0x04);sleep(1);  // 等待复位完成// 2. 启用光感和距离检测i2c_write(fd, 0x00, 0x03);sleep(1);  // 等待设备启动while (1) {// 3. 读取光照强度数据int als_data = i2c_read_word(fd, 0x0C);printf("Ambient Light: %d\n", als_data);// 4. 读取距离数据int ps_data = i2c_read_word(fd, 0x0E);int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);printf("Proximity Distance: %d\n", distance);sleep(3);  // 每 3 秒读取一次}close(fd);return EXIT_SUCCESS;
}

代码ioctl(fd, I2C_SLAVE, I2C_ADDR)的作用

I2C_SLAVE 是一个 ioctl 命令,用于设置当前通信的 I2C 从设备地址,在同一条 I2C 总线上可以有多个设备,这个 ioctl 调用用于选择当前要操作的I2C设备,它告诉 Linux的I2C 驱动,后续所有 read()write() 操作都针对 0x1E 这个 I2C 设备。

代码int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);

通过博文 https://blog.csdn.net/wenhao_ir/article/details/146319007 【搜索“读取距离值”】中我们知道需要取一个字的高8位的低6位和低8位的低4位组成一个10位的数值,所以有了这个distance的计算公式。
注意:0x3F = 0b0011 1111,作与操作后就可以得到ps_data高8位的低6位。

交叉编译代码

将文件I2C_direct_control_ATP2126C.c复制到Ubuntu中:
在这里插入图片描述
运行下面的命令编译它得到ELF可执行程序:

arm-buildroot-linux-gnueabihf-gcc -o I2C_direct_control_ATP2126C I2C_direct_control_ATP2126C.c

在这里插入图片描述

测试生成的可执行程序

将刚才交叉编译生成的ELF可执行程序复制到NFS网络文件目录中:
在这里插入图片描述
打开串口终端→打开开发板→挂载网络文件系统:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

然后运行下面的命令执行程序:

cd /mnt/IC2_app1
./I2C_direct_control_ATP2126C

运行结果如下:
在这里插入图片描述
然后我用手电筒照向芯片AP3216C,运行结果如下:
在这里插入图片描述
可见光照强度的数值变大了很多。

接下来我再用我的手指靠近芯片AP3216C,运行结果如下:
在这里插入图片描述
可见距离接近值也变大了很多,说明程序没有问题,测试成功。

附代码文件和编译好的ELF可执行程序

https://pan.baidu.com/s/1URp5fmx5iBuusK2GZXCKaA?pwd=3yuq

利用i2c-tools工具集对I2C设备AP3216C进行读写操作

完整代码(I2C_tools_control_ATP2126C.c)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <smbus.h>#define I2C_BUS "/dev/i2c-0"  // I2C 设备文件
#define I2C_ADDR 0x1E  // AP3216C 设备地址// 写入 I2C 设备寄存器
void i2c_write(int fd, unsigned char reg, unsigned char value) {if (i2c_smbus_write_byte_data(fd, reg, value) < 0) {perror("Failed to write to I2C device");exit(EXIT_FAILURE);}
}// 读取 I2C 设备寄存器(16位数据)
int i2c_read_word(int fd, unsigned char reg) {int res = i2c_smbus_read_word_data(fd, reg);if (res < 0) {perror("Failed to read from I2C device");exit(EXIT_FAILURE);}return res; // 低字节在前,高字节在后
}int main() {int fd = open(I2C_BUS, O_RDWR);if (fd < 0) {perror("Failed to open I2C bus");return EXIT_FAILURE;}if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {perror("Failed to select I2C device");return EXIT_FAILURE;}// 1. 软复位 AP3216Ci2c_write(fd, 0x00, 0x04);sleep(1);  // 等待复位完成// 2. 启用光感和距离检测i2c_write(fd, 0x00, 0x03);sleep(1);  // 等待设备启动while (1) {// 3. 读取光照强度数据int als_data = i2c_read_word(fd, 0x0C);printf("Ambient Light: %d\n", als_data);// 4. 读取距离数据int ps_data = i2c_read_word(fd, 0x0E);int distance = ((ps_data >> 8) & 0x3F) << 4 | (ps_data & 0x0F);printf("Proximity Distance: %d\n", distance);sleep(3);  // 每 3 秒读取一次}close(fd);return EXIT_SUCCESS;
}

代码分析说明

代码没啥好分析与详解的,与上一个代码差不多,差别就是把对设备的读写函数read、write换成了i2c-tools工具集的函数i2c_smbus_read_word_datai2c_smbus_write_byte_data,其实i2c-tools工具集的函数也是在基本的读写函数read、write上套壳开发的嘛。

交叉编译代码

首先请参考博文 https://blog.csdn.net/wenhao_ir/article/details/146364042 把i2c-tools编译并安装配置好。

然后把源代码文件I2C_tools_control_ATP2126C.c复制到Ubuntu中:
在这里插入图片描述
运行下面的命令编译它得到ELF可执行程序:

arm-buildroot-linux-gnueabihf-gcc -o I2C_tools_control_ATP2126C I2C_tools_control_ATP2126C.c  -L/home/book/mybuild/i2c-tools-4.2/tmp/usr/local/lib -li2c

在这里插入图片描述

测试生成的可执行程序

将刚才交叉编译生成的ELF可执行程序复制到NFS网络文件目录中:
在这里插入图片描述

打开串口终端→打开开发板→挂载网络文件系统:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt

然后运行下面的命令执行程序:

cd /mnt/IC2_app2
./I2C_tools_control_ATP2126C

运行结果如下:
在这里插入图片描述
然后我用手电筒照向芯片AP3216C,运行结果如下:
在这里插入图片描述
可见光照强度的数值变大了很多。

接下来我再用我的手指靠近芯片AP3216C,运行结果如下:

可见距离接近值也变大了很多,说明程序没有问题,测试成功。

在这里插入图片描述

附代码文件和编译好的ELF可执行程序

https://pan.baidu.com/s/1H6n1CtONgR8JPpqciKq6ww?pwd=z4us

http://www.dtcms.com/wzjs/515104.html

相关文章:

  • 盲盒小程序搭建抖音seo搜索引擎优化
  • 开拓网站建设电脑办公软件培训班
  • wordpress移动导航菜单seo服务加盟
  • 网站排名关键词最新的全国疫情数据
  • 做电脑回收什么网站好营销推广app
  • 装饰网站建设公司网站流量查询站长之家
  • 网站建设 联系我们优化电脑的软件有哪些
  • 网站搜索页面设计搜索百度一下
  • 做赌博网站条件网络营销公司排行榜
  • 静态网站建设2022今天刚刚发生地震了
  • 开普网站建设公司新闻发稿渠道
  • 青州网站建设qzfuwu云浮新增确诊病例30例
  • 灌南县规划局网站一品嘉苑规划建设关键字查找
  • 杭州制作网页与网站广告竞价
  • 网页制作全套教程视频百度搜索引擎优化的方法
  • 济南企业建站怎么样深圳seo优化排名公司
  • 普洱网站建设优化网络服务器的作用
  • 长沙县政务网站百度收藏夹使用方法
  • 邢台做网站哪儿好外贸独立站怎么建站
  • 监控视频做直播网站松松软文平台
  • 锤子 网站 模版游戏推广员是做什么的
  • 福州做网站外包团队网页设计制作网站代码
  • 郑州河北建设工程信息网站app营销策略有哪些
  • 新鸿儒网站外链群发平台
  • 网站首页横版图怎么做黑龙江新闻头条最新消息
  • 桂林网站建设费用百度电脑版登录网站
  • 四川旅游攻略自由行攻略青岛百度推广seo价格
  • wordpress模版建站武汉网站排名推广
  • 购物网站php模板有人看片吗免费观看视频
  • 中国建设监理协会网站投稿中国软文网官网