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域…

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…

力扣题:子序列-12.29

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

解决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 二、流 流是序列化设备的抽象表示序列化设备可以线性方式储存数据并可按照同样的方式访问一次…

IgH调试注意事项

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

【前端基础】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工具…

【大数据存储与处理】第一次作业

hbase 启动步骤 1、启动 hadoop&#xff0c;master 虚拟机&#xff0c;切换 root 用户&#xff0c;输入终端命令&#xff1a;start-all.sh 2、启动 zookeeper&#xff0c;分别在 master、slave1、slave2 虚拟机终端命令执行&#xff1a;zkServer.sh start 3、启动 hbase&#x…

Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)

文章目录 Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)1、正确的运行页面2、报错404问题分类解决2.1、Tomcat未配置环境变量2.2、IIs访问权限问题2.3、端口占用问题2.4、文件缺少问题解决办法&#xff1a; Tomcat报404问题解决方案大全(包括tomcat可以正常运…

04-JVM字节码文件结构深度剖析

一、源代码 package com.tuling.jvm;public class TulingByteCode {private String userName;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;} }二、通过javap -verbose TulingByteCode .class反编译 //…

【Spring Security】打造安全无忧的Web应用--进阶篇

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.导入相关配置 1.pom 2.ym…

【sgDragUploadFolder】自定义组件:自定义拖拽文件夹上传组件,支持上传单个或多个文件/文件夹,右下角上传托盘出现(后续更新...)

特性&#xff1a; 支持在拖拽上传单个文件、多个文件、单个文件夹、多个文件夹可自定义headers可自定义过滤上传格式可自定义上传API接口支持显示/隐藏右下角上传队列托盘 sgDragUploadFolder源码 <template><div :class"$options.name" :dragenter"i…

.Net Core webapi RestFul 统一接口数据返回格式

在RestFul风格盛行的年代&#xff0c;大部分接口都需要一套统一的数据返回格式&#xff0c;那么我们怎么才能保证使用统一的json数据格式返回呢&#xff0c;下面给大家简单介绍一下&#xff1a; 假如我们需要接口统一返回一下数据格式&#xff1a; {"statusCode": …