python编程(1)之通用引脚GPIO使用

        在之前的章节中,小编带领大家学习了:如何构建esp32的python开发环境-CSDN博客

        今天小编带领大家开始学习python编程的第一节,通用引脚。esp32c3核心板是一个高度集成,功能丰富的模块,来看下他的功能分布:

        我们可以看到,esp32c3为我们提供很多外设,串口uart、i2c、spi、adc和pwm等,这些外设,在后续的课程中,都会为大家一一讲解。

一、熟悉引脚概念和应用

1.1、通用管脚概念

        今天就来学习下,通用引脚的概念和用作。引脚:是单片机这种主控芯片特有的名字,可以理解它和我们人类的手脚相似,不管做什么事情,都是需要依靠它,下图针脚形状的都是引脚。

             

        单片机的引脚会有很多,人类只有一副手脚,那是因为我们的手脚可以做很多复杂的动作,攥拳、握手、活动手指等。因为单片机的引脚功能相对人类能做的能做到的动作很有限,所以需要更多的引脚来完成复杂和大工作量的任务。

1.2、管脚功能和模式

        通用引脚主要分为数字、模拟两种功能,又分为输出和输入两种模式:

        ①状态1一般等于系统电压,指的是当前的主控芯片采用的电压,esp32系列是3.3V的供电电压,所以系统电压就是3.3V。

        ②状态0一般等于GND,也就是接地,电压为0V。

        ③模拟电压是一个范围的值,输出的电压范围一般是 0 到 系统电压,输入同理。

        这里面可能很多小朋友,对数字和模拟理解可能比较晦涩,这是需要大篇幅来讲解,会在后续的分享中,给大家一一讲解,今天主要掌握数字引脚的输出电压状态就可以啦。

        上述的uart、i2c、spi、adc和pwm等功能都是通过管脚的输出和输入模式来实现的。

1.3、TTL逻辑电平

        这里给大家补充一个概念,ttl电平,上述说状态1一般是系统电压,状态0一般是GND,其实这是不准确,这个是根据控制芯片的供电电压决定的。

        比如:VCC(系统电压)5.0V,输入的状态1(Vih)电压指的是  大于2.0V就都可以认为是状态1;同理输入状态0(Vil)电压指的是小于0.8V就都是状态0;输出状态1(Voh)电压指的是 大于2.4V就可以;同理输出状态0(Vol)电压指的是 小于0.4V就可以。

         单片机的输出电压状态1和0,是直接被拉满的,以3.3V供电电压esp32为例,状态1输出的就是3.3V,状态0输出的就是0V.

二、项目实战

2.1、官方学习文档

        通过python控制单片机,采用的核心技术是micropython技术,大家可以关注官网,了解更多的概念和例子:MicroPython - Python for microcontrollers;中文网:micropython中文网

        打开中文官网,选择esp32部分,来看下官方提供了哪些例子:

2.2、引脚和GPIO例子

from machine import Pinp0 = Pin(0, Pin.OUT)    # create output pin on GPIO0
p0.on()                 # set pin to "on" (high) level
p0.off()                # set pin to "off" (low) level
p0.value(1)             # set pin to on/highp2 = Pin(2, Pin.IN)     # create input pin on GPIO2
print(p2.value())       # get value, 0 or 1

        micropython最大的优势就是提供很多系统库,方便我们使用

        首先导入引脚库: from machine import Pin

        设置引脚输出模式:p0 = Pin(0, Pin.OUT)

        控制引脚的状态:p0.on()等价与p0.value(1);p0.off()等价与p0.value(0)

        设置引脚输入模式:p2 = Pin(2, Pin.IN)

        读取输入的值:print(p2.value())

2.3、点亮led

        通过对引脚的学习,那我们就来实战一下,点亮一个led

from machine import Pinled1 = Pin(12, Pin.OUT)   
led2 = Pin(13, Pin.OUT)  
led1.on()                  
led2.value(1)            

        我们的板子上自带两个led,分别和引脚12、13进行连接,控制两个引脚就可以点亮led了。

        打开开发环境thonny,复制代码,下载程序,看下实际运行效果

        运行效果:

三、python语法小课堂

3.1、变量定义

        顾名思义,变量(Variable)是可以改变的量,与之相对的是不可改变的常量。变量可以理解为数据的容器。

        变量名是由用户自己定义的标识符。其命名规则如下:

        ①由字母、下划线、数字、汉字、日文、韩文、俄文等语言文字组成。不能包含下划线以外的英文标点符号,因为这些符号被用作为运算符。另外经过测试中文标点符号也不允许。

        ②第一个字符不能是数字。因为数值使用数字开头,十六进制还使用a-f之间的字母,数字开头的标识符也表示变量会让编译器难以处理。

        ③区分大小写、长度不限和不得与关键字同名

合法变量名:  _ab、abc、ABC、ab123等

不合法变量名:1abc、@abc、class等

3.2、库的导入

        库的作用,就是把写好的代码封装好成库,后面在使用的时候,就可以通过导入库,来进行调用使用了,不用重复写代码了。python提供倒入库的语法是通过import语句

        Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。

①import 语句

模块定义好后,我们可以使用 import 语句来引入模块,语法如下:

import module1[, module2[,... moduleN]]

        比如要引用模块 math,就可以在文件最开始的地方用 import math 来引入。在调用 math 模块中的函数时,必须这样引用:

模块名.函数名

        一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

②from…import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:

from modname import name1[, name2[, ... nameN]]

例如,要导入模块 fib 的 fibonacci 函数,使用如下语句:

from fib import fibonacci

        这个声明不会把整个 fib 模块导入到当前的命名空间中,它只会将 fib 里的 fibonacci 单个引入到执行这个声明的模块的全局符号表。

③from…import* 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

例如我们想一次性引入 math 模块中所有的东西,语句如下:

from math import *

3.3、方法(函数)的调用

        定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。如下实例调用了printme()函数:

#!/usr/bin/python
# -*- coding: UTF-8 -*-# 定义函数
def printme( str ):"打印任何传入的字符串"print strreturn# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

        更多的python的语法,可以参考这个学习简单明了:Python 函数 | 菜鸟教程 (runoob.com)

,小编后续课程会以应用为主,编程语言的实战应用。更多语言的语法问题可以参考其他文章学习。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GraphPad Prism 10 for Mac v10.0.0.3 安装教程

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件,它可以将科学图形、综合曲线拟合(非线性回归)、可理解的统计数据、数据组织结合在一起,除了最基本的数据统计分析外,还能自动生成统…

统信UOS|DNS server|04-添加主域名解析

原文链接:统信UOS|DNS server|04-添加主域名解析 hello,大家好啊!继我们在之前的文章中成功部署了测试用的HTTP服务器、搭建了DNS解析服务器,并添加了子域名解析之后,今天我们将继续我们的DNS域…

uniapp随记

文章目录 this的指向 this的指向 在使用api-uni.chooseMedia时,选中的图片不能给data中的变量赋值,需要增加变量代替this 参考文章 原来的代码 chooseMedia() {uni.chooseMedia({count: 9,mediaType: [image, video],sourceType: [album, camera],maxD…

VSCode安装PYQT5

安装PYQT5 pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple 获得Python环境位置 查看函数库安装位置 pip show 函数库名 通过查询函数库,了解到python安装位置为 C:\User…

C语言中常见的关键字

一、数据类型关键字(20个) 基本数据类型(5个) void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符型类型数据,属于整型数据的一种 int&#xff…

力扣题:子序列-12.29

力扣题-12.29 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:522. 最长特殊序列 II 解题思想:首先将字符串列表按长度进行降序,然后对每个字符串进行判断是否是独有的子序列,因为短的字串可能是长的字串的子序…

力扣:LCR 161. 连续天数的最高销售额(最大子数组和,动态规划入门)

链接:力扣:LCR 161. 连续天数的最高销售额 题目: 某公司每日销售额记于整数数组 sales,请返回所有 连续 一或多天销售额总和的最大值。 要求实现时间复杂度为 O(n) 的算法。 示例 1: 输入:sales [-2,1,-3,4,-1,2,1…

解决vue2项目 el-dialog弹窗不显示

初始写法 使用了v-model 弹窗不显示 <el-dialog v-model"dialogVisible" title"Popup Content" :width"dialogWidth" close"handleCloseDialog"><p>{{ selectedItemContent }}</p></el-dialog> 将v-model改…

2023.12.19 关于 Redis 通用全局命令

目录 引言 Redis 全局命令 SET & GET KEYS EXISTS DEL EXPIRE TTL TYPE redis 引入定时器高效处理过期 key 基于优先级队列方式 基于时间轮方式 引言 Redis 是根据键值对的方式存储数据的必须要进入 redis-cli 客户端程序 才能输入 redis 命令 Redis 全局命令 R…

【藏经阁一起读】(80)__《2023龙蜥社区白皮书》

【藏经阁一起读】&#xff08;80&#xff09;__《2023龙蜥社区白皮书》 2023龙蜥社区白皮书 作者&#xff1a; 小龙 发布时间&#xff1a;2023-11-15 章节数&#xff1a;79 内容简介&#xff1a; 从解决CentOS停服的问题出发为广大用户的业务连续性提供了坚定的保障&#xf…

C# 使用MSTest进行单元测试

目录 写在前面 代码实现 执行结果 写在前面 MSTest是微软官方提供的.NET平台下的单元测试框架&#xff1b;可使用DataRow属性来指定数据&#xff0c;驱动测试用例所用到的值&#xff0c;连续对每个数据化进行运行测试&#xff0c;也可以使用DynamicData 属性来指定数据&…

用友U8+CRM help2 任意文件读取漏洞复现

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 help2接口处存在任意文件读取漏洞&#xff0c;攻击者通过漏洞可以获取到服…

RK3568平台 并发与竞争控制机制总结

一.并发与竞争机制总结 二.原子操作 “原子”是化学世界中不可再分的最小微粒&#xff0c;一切物质都由原子组成。在Linux 内核中的原子操作可以理解为“不可被拆分的操作”&#xff0c;就是不能被更高等级中断抢夺优先的操作。在C语言中可以使用以下代码对一个整形变量赋值。…

C#文件操作(二)

一、前言 文章的续作前文是&#xff1a; C#文件操作&#xff08;一&#xff09;-CSDN博客https://blog.csdn.net/qq_71897293/article/details/135117922?spm1001.2014.3001.5501 二、流 流是序列化设备的抽象表示序列化设备可以线性方式储存数据并可按照同样的方式访问一次…

大批量数据导出csv,平替导出excel性能优化解决方案封装工具类

阿丹&#xff1a; 有些业务逻辑需要在导出非常大量的数据&#xff0c;几百甚至几千万的数据这个时候再导出excel来对于性能都不是很友好&#xff0c;这个时候就需要替换实现思路来解决这个问题。 本文章提供了两种解决的方案&#xff0c;也是两种从数据库中拿取数据的方式一种是…

java String, StringBuffer StringBuilder 的区别

Java中的String, StringBuffer, 和 StringBuilder 都是用于处理字符串的类&#xff0c;但它们之间存在一些关键的差异&#xff0c;String 的长度是不可变的&#xff1b;StringBuffer 的长度是可变的&#xff0c;如果你对字符串中的内容经常进行操作&#xff0c;特别是内容要修改…

IgH调试注意事项

1&#xff0c;不要在虚拟机测试&#xff0c;否则IgH无法收发数据包 现象&#xff1a;虚拟机中运行IgH master并绑定网卡后&#xff0c;主站由ORPHANED状态转换成IDLE状态&#xff0c;但无法收发数据报。 这是因为虚拟机用的是虚拟网卡&#xff0c;需通过iptables将数据包到转…

八股文打卡day6——计算机网络(6)

面试题&#xff1a;GET请求和POST请求的区别 我的回答&#xff1a; 1.作用不同&#xff1a;GET是用来获取服务器资源的;POST是用来向服务器提交资源的&#xff1b; 2.参数传递方式不同&#xff1a;GET请求参数一般写在URL中的&#xff0c;只能接收ASCII字符&#xff1b;POST的…

【前端基础】script引入资源脚本加载失败解决方案(重新加载获取备用资源)

问题描述 现在假设有一个script资源加载失败&#xff0c;代码如下 <!DOCTYPE html> <html> <head><title>script 资源加载失败</title> </head> <body><script src"http:hdh.sdas.asdas/1.js"></script> &l…

openGuass:极简版安装

目录 一、openGauss简介 二、初始化安装环境 1.创建安装用户 2.修改文件句柄设置 ​3.修改SEM内核参数 4.关闭防火墙 6.禁用SELINUX 7.安装依赖软件 8.重启服务器 三、安装数据库 1.下载安装包 2.创建安装目录 3.解压安装包 4.执行安装 5.验证安装 四、gsql工具…