LuatOS-SOC接口文档(air780E)-- i2c - I2C操作
常量
| 常量 | 类型 | 解释 |
|---|---|---|
| i2c.FAST | number | 高速 |
| i2c.SLOW | number | 低速 |
i2c.exist(id)
i2c编号是否存在
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
返回值
| 返回值类型 | 解释 |
|---|---|
| bool | 存在就返回true,否则返回false |
例子
-- 检查i2c1是否存在
if i2c.exist(1) thenlog.info("存在 i2c1")
end
i2c.setup(id, speed, slaveAddr)
i2c初始化
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C速度, 例如i2c.FAST |
返回值
| 返回值类型 | 解释 |
|---|---|
| int | 成功就返回1,否则返回0 |
例子
-- 初始化i2c1 i2c.setup(1, i2c.FAST) -- 端口正确就一定成功 -- 如需判断i2c id是否合法, 请使用 i2c.exist 函数
i2c.createSoft(scl,sda,delay)
新建一个软件i2c对象
参数
| 传入值类型 | 解释 |
|---|---|
| int | i2c SCL引脚编号(GPIO编号) |
| int | i2c SDA引脚编号(GPIO编号) |
| int | 每个操作的延时, 单位us, 默认5 |
返回值
| 返回值类型 | 解释 |
|---|---|
| 软件I2C对象 | 可当作i2c的id使用 |
例子
-- 注意!这个接口是软件模拟i2c,速度可能会比硬件的慢 -- 不需要调用i2c.close接口 -- 初始化软件i2c local softI2C = i2c.createSoft(1, 2, 5) i2c.send(softI2C, 0x5C, string.char(0x0F, 0x2F)) -- 注意, 第3个参数是 2023.06.19 添加的delay -- 通过调整delay参数的值, 可增加或降低I2C的速度
i2c.send(id, addr, data,stop)
i2c发送数据
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| integer/string/table | 待发送的数据,自适应参数类型 |
| integer | 可选参数 是否发送停止位 1发送 0不发送 默认发送(105不支持) |
返回值
| 返回值类型 | 解释 |
|---|---|
| true/false | 发送是否成功 |
例子
-- 往i2c0发送1个字节的数据
i2c.send(0, 0x68, 0x75)
-- 往i2c1发送2个字节的数据
i2c.send(1, 0x5C, string.char(0x0F, 0x2F))
i2c.send(1, 0x5C, {0x0F, 0x2F})
i2c.recv(id, addr, len)
i2c接收数据
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| int | 接收数据的长度 |
返回值
| 返回值类型 | 解释 |
|---|---|
| string | 收到的数据 |
例子
-- 从i2c1读取2个字节的数据 local data = i2c.recv(1, 0x5C, 2)
i2c.writeReg(id, addr, reg, data,stop)
i2c写寄存器数据
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| int | 寄存器地址 |
| string | 待发送的数据 |
| integer | 可选参数 是否发送停止位 1发送 0不发送 默认发送(105不支持) |
返回值
| 返回值类型 | 解释 |
|---|---|
| true/false | 发送是否成功 |
例子
-- 从i2c1的地址为0x5C的设备的寄存器0x01写入2个字节的数据 i2c.writeReg(1, 0x5C, 0x01, string.char(0x00, 0xF2))
i2c.readReg(id, addr, reg, len)
i2c读寄存器数据
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| int | 寄存器地址 |
| int | 待接收的数据长度 |
| integer | 可选参数 是否发送停止位 1发送 0不发送 默认发送(105不支持) |
返回值
| 返回值类型 | 解释 |
|---|---|
| string | 收到的数据 |
例子
-- 从i2c1的地址为0x5C的设备的寄存器0x01读出2个字节的数据 i2c.readReg(1, 0x5C, 0x01, 2)
i2c.close(id)
关闭i2c设备
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
返回值
| 返回值类型 | 解释 |
|---|---|
| nil | 无返回值 |
例子
-- 关闭i2c1 i2c.close(1)
i2c.readDHT12(id)
从i2c总线读取DHT12的温湿度数据
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | DHT12的设备地址,默认0x5C |
返回值
| 返回值类型 | 解释 |
|---|---|
| boolean | 读取成功返回true,否则返回false |
| int | 湿度值,单位0.1%, 例如 591 代表 59.1% |
| int | 温度值,单位0.1摄氏度, 例如 292 代表 29.2摄氏度 |
例子
-- 从i2c0读取DHT12
i2c.setup(0)
local re, H, T = i2c.readDHT12(0)
if re thenlog.info("dht12", H, T)
end
i2c.readSHT30(id,addr)
从i2c总线读取DHT30的温湿度数据(由”好奇星”贡献)
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | 设备addr,SHT30的设备地址,默认0x44 bit7 |
返回值
| 返回值类型 | 解释 |
|---|---|
| boolean | 读取成功返回true,否则返回false |
| int | 湿度值,单位0.1%, 例如 591 代表 59.1% |
| int | 温度值,单位0.1摄氏度, 例如 292 代表 29.2摄氏度 |
例子
-- 从i2c0读取SHT30
i2c.setup(0)
local re, H, T = i2c.readSHT30(0)
if re thenlog.info("sht30", H, T)
end
i2c.transfer(id, addr, txBuff, rxBuff, rxLen)
i2c通用传输,包括发送N字节,发送N字节+接收N字节,接收N字节三种功能,在发送转接收过程中发送reStart信号,解决类似mlx90614必须带restart信号,但是又不能用i2c.send来控制的,比如air105
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| integer/string/zbuff | 待发送的数据,自适应参数类型,如果为nil,则不发送数据 |
| zbuff | 待接收数据的zbuff 如果不用zbuff,则接收数据将在return返回 |
| int | 需要接收的数据长度,如果为0或nil,则不接收数据 |
返回值
| 返回值类型 | 解释 |
|---|---|
| boolean | true/false 发送是否成功 |
| string | or nil 如果参数5是interger,则返回接收到的数据 |
例子
local result, _ = i2c.transfer(0, 0x11, txbuff, rxbuff, 1) local result, _ = i2c.transfer(0, 0x11, txbuff, nil, 0) --只发送txbuff里的数据,不接收数据,典型应用就是写寄存器了,这里寄存器地址和值都放在了txbuff里 local result, _ = i2c.transfer(0, 0x11, "\x01\x02\x03", nil, 1) --发送0x01, 0x02,0x03,不接收数据,如果是eeprom,就是往0x01的地址写02和03,或者往0x0102的地址写03,看具体芯片了 local result, rxdata = i2c.transfer(0, 0x11, "\x01\x02", nil, 1) --发送0x01, 0x02,然后接收1个字节,典型应用就是eeprom local result, rxdata = i2c.transfer(0, 0x11, 0x00, nil, 1) --发送0x00,然后接收1个字节,典型应用各种传感器
i2c.xfer(id, addr, txBuff, rxBuff, rxLen, transfer_done_topic, timeout)
i2c非阻塞通用传输,类似transfer,但是不会等到I2C传输完成才返回,调用本函数会立刻返回,I2C传输完成后,通过消息回调
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
| int | I2C子设备的地址, 7位地址 |
| zbuff | 待发送的数据,由于用的非阻塞模型,为保证动态数据的有效性,只能使用zbuff,发送的数据从zbuff.addr开始,长度为zbuff.used |
| zbuff | 待接收数据的zbuff,如果为nil,则忽略后面参数, 不接收数据。接收的数据会放在zbuff.addr开始的位置,会覆盖掉之前的数据,注意zhuff的预留空间要足够 |
| int | 需要接收的数据长度,如果为0或nil,则不接收数据 |
| string | 传输完成后回调的消息 |
| int | 超时时间,如果填nil,则为100ms |
返回值
| 返回值类型 | 解释 |
|---|---|
| boolean | true/false 本次传输是否正确启动,true,启动,false,有错误无法启动。传输完成会发布消息transfer_done_topic和boolean型结果 |
例子
local result = i2c.xfer(0, 0x11, txbuff, rxbuff, 1, "I2CDONE") if result then result, i2c_id, succ, error_code = sys.waitUntil("I2CDONE") end if not result or not succ then log.info("i2c fail, error code", error_code) else log.info("i2c ok") end
i2c.scan(id)
扫描i2c设备
参数
| 传入值类型 | 解释 |
|---|---|
| int | 设备id, 例如i2c1的id为1, i2c2的id为2 |
返回值
| 返回值类型 | 解释 |
|---|---|
| nil | 当前无返回值 |
例子
-- 本函数于2023.07.04添加 -- 这个函数的主要目标是为了在开发期扫描i2c设备 -- 有些BSP在指定addr无响应时会输出日志,导致输出会被打乱 i2c.scan()
相关文章:
LuatOS-SOC接口文档(air780E)-- i2c - I2C操作
常量 常量 类型 解释 i2c.FAST number 高速 i2c.SLOW number 低速 i2c.exist(id) i2c编号是否存在 参数 传入值类型 解释 int 设备id, 例如i2c1的id为1, i2c2的id为2 返回值 返回值类型 解释 bool 存在就返回true,否则返回false 例子 -- 检查i2c1是否存…...
帝国cms改目录后打不开,帝国cms改目录生成后还是404
帝国CMS更改了网站域名或者栏目目录地址信息打不开的解决方法,一起来看看吧: 很多的小伙伴们,改了后台的系统设置里面的网站地址或者栏目目录地址,信息页就打不开的解决方法如下: 后台>系统>数据更新>更新信…...
计算机毕业设计选什么题目好?springboot智慧养老中心管理系统
✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...
创建一个基本的win32窗口
1.建立一个窗口的基本步骤 (1)向系统注册一个窗体类 (2)根据窗体类创建窗口 (3)进入消息循环 2.程序结构 (1)主函数的输入参数 int WINAPI WinMain( HISTANCE hInstance,//当前窗口的句柄 HINSTANCE hPr…...
如何在 Spring Boot 中使用 WebSocket
在Spring Boot中使用WebSocket构建实时应用 WebSocket是一种用于实现双向通信的网络协议,它非常适合构建实时应用程序,如在线聊天、实时通知和多人协作工具。Spring Boot提供了对WebSocket的支持,使得在应用程序中集成WebSocket变得非常容易…...
ubuntu2023装完显卡驱动和CUDA CUDNN开机只有下划线闪烁
解决方法 网上很多方案,如Ubuntu开机后卡死只有左上角有一个下划线不停闪烁_ubuntu开机左上角横杠一直闪-CSDN博客,原因是显卡驱动和系统内核不兼容,解决方案是CtrlAltF2打开tty模式进行问题检查 但是我CtrlAltF2完全没反应。 于是…...
MySQL三种安装方法(yum安装、编译安装、二进制安装)
mysql安装 一、yum安装方式二、编译安装方式三、二进制安装方式 切记:一定要关闭防火墙和selinux!!! 服务器配置:2C4G即可,一台 一、yum安装方式 mysql的官方网站:www.mysql.com 中文官网&…...
《视觉 SLAM 十四讲》第 7 讲 视觉里程计1 【如何根据图像 估计 相机运动】【特征点法】
github源码链接V2 文章目录 第 7 讲 视觉里程计17.1 特征点法7.1.1 特征点7.1.2 ORB 特征FAST 关键点 ⟹ \Longrightarrow ⟹ Oriented FASTBRIEF 描述子 7.1.3 特征匹配 7.2 实践 【Code】本讲 CMakeLists.txt 7.2.1 使用 OpenCV 进行 ORB 的特征匹配 【Code】7.2.2 手写 O…...
9. 一个SpringBoot项目运行
新手如何运行一个SpringBoot项目 1.SpringBoot项目运行 新创建的SpringBoot项目如何运行 2.启动lombok注解 点击该按钮,启动lombok注解支持 3.展示说明...
如何实现chatGPT批量问答,不用token
一、背景 因为需要批量提取一本教材里的概念做成知识图谱,想用chatGPT做概念提取。 调用api?别想了… 免费帐户的api慢得一批于是想用模仿人类交互的方法来调用,本来想用pyautogui的,但是主要是与浏览器交互,还是用s…...
Arduino驱动LIS2DH三轴加速度传感器(惯性测量传感器篇)
目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 LIS2DH加速度计相对传统的ADXL345在稳定性以及功耗上都有一定的优化,低功耗模式下仅为2μA(普通模式11μA),并且最高支持5.3KHz输出频率,拥有2g/4g/8g/16g四档可选量程&...
B 开组会(可持久线段树+树剖) 武汉大学2023年新生程序设计竞赛(同步赛)
其实题目就是每次询问一个节点 在这个节点的基础上往下继续遍历t的深度,在这个遍历的过程中找一个最大值就行了 其实这个题目数据非常水,直接暴力就可以过了 下面是别人过的代码 #include<bits/stdc.h> using namespace std; const int mxn5e…...
vue的axios方法
Axios是Vue.js推荐使用的一个基于Promise的HTTP库,用于浏览器和Node.js中发送HTTP请求。它可以让我们更容易地与后端进行数据交互。 以下是Axios的基本用法: 安装Axios 在Vue项目中,可以使用npm来安装Axios: npm install axio…...
gitlab docker部署,备份,恢复。附踩坑记录
本次安装在CentOS7下进行 1、安装yum 检查是否已经安装yum yum --version如果未安装 sudo yum install -y yum-utils添加镜像源: 国外镜像源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo阿里镜像源&am…...
2023品牌新媒体矩阵营销洞察报告:流量内卷下,如何寻找增长新引擎?
近年来,随着移动互联网的发展渗透,短视频、直播的兴起,新消费/新零售、兴趣电商/社交电商等的驱动下,布局线上渠道已成为绝大多数品牌的必然选择。 2022年,越来越多的品牌加入到自运营、自播的行列中,并且从…...
HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Toggle
组件提供勾选框样式、状态按钮样式及开关样式。该组件从API Version 8开始支持。 仅当ToggleType为Button时可包含子组件。 一、接口 Toggle(options: { type: ToggleType, isOn?: boolean }) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: Toggle…...
redis,mongoDB,mysql,Elasticsearch区别
Redis: Redis是一种高性能键值存储数据库,基于内存操作,支持数据持久化,支持数据类型丰富灵活,如字符串、哈希、列表、集合、有序集合等。Redis还提供了订阅/发布、事务、Lua脚本、主从同步等功能,适用于访…...
什么是软件测试架构师?
软件测试架构师是一个新职位,但确实是一个非常必要的职位,主要有几点: 1. 根据V模型、广义测试概念等,(静态)测试的越早,发现缺陷越早,越有利于产品的质量、加快产品开发周期、降低企业的成本。更重要预防…...
安科瑞ARB5系列弧光保护装置,智能电弧光保护,保障用电安全
安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 什么是弧光 电弧是放电过程中发生的一种现象,当两点之间的电压超过其工频绝缘强度极限时就会发生。当适当的条件出现时,一个携带着电流的等离子产生,直到电源侧的保护设备断开才会消失。空气在通常条件…...
查找算法——二分查找法
一、介绍 首先需要将查找的数据排好序,再进行二分查找法来进行查找,二分查找是将数据范围不断分割为两份,不断比较中间值与待查找值的大小来确定其在哪个区间范围的一种方法。例如:在一组数据(1,4ÿ…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
ThreadLocal 源码
ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物,因为每个访问一个线程局部变量的线程(通过其 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段,这些类希望将…...
