【Micropython教程】I2C的使用

文章目录

  • 前言
  • 一、I2C的使用
    • 1.1 分析一种情况
    • 1.2 初始化I2C总线
    • 1.3 扫描可用的I2C设备
    • 1.4 向指定地址写入数据
    • 1.5 读取指定地址的数据
    • 1.6 关闭I2C总线
  • 二、示例代码
  • 总结


前言

MicroPython 是一种精简的 Python 实现,旨在运行在微控制器和嵌入式系统上。在嵌入式开发中,与外部设备进行通信是一项常见任务。而 I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,适用于连接各种传感器、显示器和其他外设。在 MicroPython 中,通过 machine 模块提供的 I2C 类,可以轻松地实现对硬件 I2C 总线的控制,并与外部设备进行通信。本教程将介绍如何在 MicroPython 中使用 I2C,包括初始化 I2C 总线、发送数据、接收数据等操作,帮助初学者快速上手。


一、I2C的使用

1.1 分析一种情况

如果我去读一个存储空间使用I2C,我先要发送我要读的地址,然后从设备把我要读的内容给我返回过来,这样就完成了一次I2C的操作了
我们可以实现两个函数,一个发送地址,一个读地址上的内容。
或者实现一个函数实现了发送地址和读地址上的内容。

对于STM32 HAL库帮我们实现了这几个函数:

  1. 一个发送一个接收这种叫做Master模式
  2. 一个函数实现发送地址和接收地址叫做Mem模式

但是我们的Micropython为了简化理解,他直接实现的是Mem模式,所以我们不需要过多去纠结他。

1.2 初始化I2C总线

我们可以使用下面这个来构造一个I2C对象:

machine.I2C(scl,sda,[,freq])

其中freq为可选参数,他为I2C的速度

import machine

# 初始化 I2C 总线
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))

1.3 扫描可用的I2C设备

我们可以使用下面这个函数扫描I2C总线上是否有设备存在
他会返回一个列表:

i2c.scan()
# 扫描连接的 I2C 设备
devices = i2c.scan()
print("Connected I2C devices:", devices)

1.4 向指定地址写入数据

我们可以使用下面这个函数进行数据的写入:

i2c.writeto_mem(device_address, mem_address, data)

参数1为设备的地址,参数2为你要写入该设备的哪个地方,data为写入的数据

# 写入数据到指定设备的指定内存地址
device_address = 0x68  # 假设设备地址为 0x68
mem_address = 0x00     # 假设内存地址为 0x00
data = b'data_to_write'

i2c.writeto_mem(device_address, mem_address, data)

1.5 读取指定地址的数据

我们可以使用下面这个函数读取数据:

i2c.readfrom_mem(device_address, mem_address, 4)  # 读取4个字节的数据

参数3为你要读取的字节个数,他会通过返回值返回数据

# 从指定设备的指定内存地址读取数据
device_address = 0x68  # 假设设备地址为 0x68
mem_address = 0x00     # 假设内存地址为 0x00
data = i2c.readfrom_mem(device_address, mem_address, 4)  # 读取4个字节的数据

print("Data read from memory:", data)

1.6 关闭I2C总线

我们可以向下面这样关闭一个I2C总线:

# 关闭 I2C 总线
i2c.deinit()

二、示例代码

使用硬件 I2C 总线与 DS3231 实时时钟模块进行通信,读取当前时间并打印出来:

import machine
import utime

# 初始化 I2C 总线
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))

# DS3231 设备地址
device_address = 0x68

# 读取 DS3231 的时间数据
data = i2c.readfrom_mem(device_address, 0, 7)

# 解析时间数据
second = data[0]
minute = data[1]
hour = data[2]
day = data[4]
month = data[5]
year = data[6]

# 打印时间数据
print("Current time: %02d:%02d:%02d %02d/%02d/%04d" % (hour, minute, second, day, month, year + 2000))

# 关闭 I2C 总线
i2c.deinit()

在这里插入图片描述


总结

通过本教程,我们学习了如何在 MicroPython 中使用 I2C 进行串行通信。首先,我们介绍了 I2C 的基本原理和工作方式,包括总线、主从设备、时钟信号和数据信号等概念。然后,我们学习了如何在 MicroPython 中初始化 I2C 总线,并通过 writeto() 和 readfrom() 方法向外部设备发送数据和接收数据。最后,我们通过实际示例演示了如何与传感器等外部设备进行通信,以及如何处理可能遇到的错误和异常情况。通过本教程的学习,读者可以掌握在 MicroPython 中使用 I2C 进行通信的基本技能,为嵌入式开发项目打下良好的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/420561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AVL 树

AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种解决…

vue3的router

需求 路由组件一般放在&#xff0c;pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面&#xff0c;再定义一个router-view组件 他的子组件&#xff0c;机会渲染在router-view区域 路由传参 <RouterLink :to"/news…

腾讯云最新活动_腾讯云促销优惠_代金券-腾讯云官网入口

腾讯云服务器多少钱一年&#xff1f;62元一年起&#xff0c;2核2G3M配置&#xff0c;腾讯云2核4G5M轻量应用服务器218元一年、756元3年&#xff0c;4核16G12M服务器32元1个月、312元一年&#xff0c;8核32G22M服务器115元1个月、345元3个月&#xff0c;腾讯云服务器网txyfwq.co…

xsslabs第七关

源码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff01;"…

《2023年勒索软件攻击态势报告》

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取码&#xff1a;2lo0

游戏空间划分技术

一、 前言 空间划分算法有很多&#xff0c;比如均匀网格&#xff0c;四/八叉树&#xff0c;k-d树&#xff0c;Bsp树&#xff0c;每一种算法都有自己的优缺点&#xff0c;我们需要从理论上理解这些算法&#xff0c;然后在实际项目中进行灵活的运用。 游戏中经常使用空间划分算…

k8s二进制部署的搭建

1.1 常见k8s安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;Install Tools | Kubernetes ●Kubeadm Kubeadm也是一个工具&#xff0c;提供kubeadm init…

【前端素材】推荐优质后台管理系统网页Hyper平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理和控制网站、应用程序或系统的管理界面。它通常被设计用来让网站或应用程序的管理员或运营人员管理内容、用户、数据以及其他相关功能。后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;通常由管理员使…

Charles抓包 - 安装、激活、证书配置

最近刚好又遇到了抓包的需求&#xff0c;之前一直使用 Fiddler 抓包&#xff0c;这几年一直听大家都在用 Charles 抓包&#xff0c;正好一起了解下&#xff08;一般建议掌握一种抓包方式即可&#xff0c;都可以解决同种需求场景&#xff09; 抓包 Fiddler抓包 Charles 下载、安…

深度解读篇章:剖析构建互联网大厦的基石——TCP/IP协议全貌

&#x1f440;&#x1f440;&#x1f440; 引言 今天&#xff0c;我们一同揭幕的是驱动全球互联网脉搏跳动的核心机密——TCP/IP协议体系。没有它&#xff0c;就不会有现今这般高效便捷的网络生活体验&#xff0c;无论在线教育、远程办公&#xff0c;抑或是电子商务、社交媒体…

强大而灵活的python装饰器

装饰器&#xff08;Decorators&#xff09; 一、概述 在Python中&#xff0c;装饰器是一种特殊类型的函数&#xff0c;它允许我们修改或增强其他函数的功能&#xff0c;而无需修改其源代码。装饰器在函数定义之后立即调用&#xff0c;并以函数对象作为参数。装饰器返回一个新…

Docker容器与虚拟化技术:OpenEuler 部署 docker容器应用

目录 一、实验 1.环境 2.OpenEuler 安装 docker 2.镜像加速 3.docker部署LAMP 二、安装docker报错 2.docker如何快速删除容器与镜像 3.docker创建mysql容器失败 4.docker创建apache容器失败 5.docker创建php-fpm容器失败 6. 80端口与php访问失败 7.httpd容器进入不…

【刷题】Leetcode 1609.奇偶树

Leetcode 1609.奇偶树 题目描述广度优先搜索&#xff08;BFS&#xff09;深度优先算法&#xff08;DFS&#xff09; 思路一&#xff08;BFS&#xff09;思路二&#xff08;DFS&#xff09;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&a…

【k8s管理--Helm包管理器】

1、Helm的概念 Kubernetes包管器 Helm是查找、分享和使用软件构件Kubernetes的最优方式。 Helm管理名为chart的Kubernetes包的工具。Helm可以做以下的事情&#xff1a; 从头开始创建新的chat将chart打包成归档tgz)文件与存储chat的仓库进行交互在现有的Kubernetes集群中安装和…

【数据库管理系统】Mysql 8.0.36入门级安装

下载地址 官方网址&#xff1a;MySQL 注意事项 建议不要安装最新版本&#xff0c;一般找mysql5.0或mysql8.0系列版本即可&#xff1b;mysq1官网有.zip和.msi两种安装形式&#xff1b;zip是压缩包&#xff0c;直接解压缩以后使用的&#xff0c;需要自己配置各种东西&#xff…

模型优化_如何提高网络/模型的泛化能力?(全面)

目录 1. 以数据为中心的泛化方法 1.1 使用更多数据 1.2 做好数据预处理 特征工程 1.3 数据增强 1.4 调整数据分布 2. 以模型为中心的泛化方法 2.1 使用更大批次 超参数调优 2.2 调整目标函数 2.3 调整网络结构 2.4 屏蔽网络节点 2.5 权值正则化 2.6 偏差-方差权衡…

计算机网络_2.2物理层下面的传输媒体

2.2物理层下面的传输媒体 一、传输媒体的分类二、导向型传输媒体1、同轴电缆2、双绞线3、光纤&#xff08;1&#xff09;光纤通信原理&#xff08;2&#xff09;光纤组成&#xff08;4&#xff09;多模光纤与单模光纤对比&#xff08;5&#xff09;光纤的波长与规格&#xff08…

自测-1 打印沙漏

文章预览&#xff1a; 题目算法代码 题目 算法 以前做过这个&#xff0c;那次是c语言写的&#xff0c;一点一点处理一层一层完成&#xff0c;这次我换了一种语言用了另一种思想使用递归去写&#xff0c;还是我们要先求出应该有多少层这个很容易&#xff0c;中间输出部分我们算…

Linux系统中安装redis+redis后台启动+常见相关配置

1、下载Redis Redis官网&#xff1a;https://redis.io/ 历史版本&#xff1a; http://download.redis.io/releases 2、连接Linux&#xff08;或者VMwear&#xff09; 我们安装的是linux版本的redis 打开xftp我们需要先将我们的Redis上传到服务器上 解压到这里 解压的指令 …

回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测

回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测 目录 回归预测 | Matlab实现BiTCN基于双向时间卷积网络的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BiTCN基于双向时间卷积网络的数据回归预测&#xff08;完整源码和数据&a…