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 Pin

p0 = 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/high

p2 = 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 Pin

led1 = 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 str
   return
 
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")

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

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

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

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

相关文章

『Linux升级路』基础开发工具——gdb篇

🔥博客主页:小王又困了 📚系列专栏:Linux 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、背景知识介绍 二、gdb指令介绍 一、背景知识介绍 在软件开发中&#xff0c…

不要再浪费时间,一键获取SolidWorks,设计革命由此开始!

不要再在网上浪费时间寻找SolidWorks的安装包了,一键下载安装,你要的一切都可以在这里找到! 对于3D建模和计算机辅助设计的人来说,SolidWorks是一个不可或缺的工具。然而,在网上寻找合法且可靠的软件安装包却常常让人…

「工业遥测」图表控件LightningChart在水工业中的应用

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…

nuxt打包占用磁盘IO

目录 前言排除过程 前言 jenkins运行打包,总是要卡一段时间,磁盘IO很高。我手动执行后的确发现了这个问题,如下图所示。 排除过程 我的方案很原始,利用git恢复到以前的版本,抽检,搞了差不多两个小时&am…

es、MySQL 深度分页问题

文章目录 es 深度分页MySQL 深度分页 es 深度分页 es 深度分页问题,有点忘记了,这里记录一下 当索引库中有10w条数据,比如是商品数据;用户就是要查在1w到后10条数据,怎么查询。 es查询是从各个分片中取出前1w到后10条数…

【SpringBoot篇】解决缓存击穿问题① — 基于互斥锁方式

文章目录 🌹什么是缓存击穿🌺基于互斥锁解决问题🛸思路 🏳️‍🌈代码实现 🌹什么是缓存击穿 缓存击穿是指在使用缓存系统时,对一个热点数据的高并发请求导致缓存失效,多个请求同时访…

JavaOOP篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、构造方法能不能显式调用?二、什么是方法重载?三、构造方法能不能重写?能不能重载?四、内部类与静态内部类的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

软件工程快速复习(期末急救)

每个同学要假想自己是一个项目经理,去完成一个软件项目,比如医院管理系统,自动设备控制系统等,以面向结构的软件工程方法,说出完成项目的步骤,涉及到的具体技术。初步了解面向对象的方法的与面向结构的方法…

“VR全景+”理念下的智慧教育,让VR教学成为趋势

随着VR技术的发展,“VR全景”理念下的智慧教育,从智慧学习环境和新型教学模式两个方面来促进教育进一步革新。VR技术应用在教育领域,对于教学来说是一个飞跃的发展,5G课堂、VR直播教学、沉浸式教学等教学模式的创新,让…

安装@vue/cli时候,升级版本造成冲突的解决方法

问题:原来是2.X版本,想要升级到4.5.9版本就出错了 npm install -g vue/cli4.5.9错误原因:之前安装过vue的2.X版本,导致冲突的文件没有被正确删除 解决方法:安装且覆盖原来存在的文件 npm install -g vue/cli4.5.9 -…

【工具与中间件】通过飞书应用操作云文档

文章目录 前言1. 准备工作1.1 创建应用1.2 创建文件夹 2. 测试租户/个人版实践2.1 权限配置2.2 控制台调试2.3 协作文档添加应用2.4 CRUD2.4.1 根据文档描述选择token并生成2.4.2 新增多维表格数据API2.4.3 删除多维表格数据API2.4.4 查询多维表格数据API2.4.5 修改多维表格数据…

AIGC绘画Midjourney风格关键词和场景关键词

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

[SWPUCTF 2021 新生赛]Do_you_know_http已

打开环境 它说用WLLM浏览器打开,使用BP抓包,发送到重发器 修改User-Agent 下一步,访问a.php 这儿他说添加一个本地地址,它给了一个183.224.40.160,我用了发现没用,然后重新添加一个地址:X-Forwa…

AI数字人互动大屏支持多种场景交互!

互动大屏(技术支持:zhibo175)本身具有令人瞩目的效果,再配置丰富多彩的多媒体,如引人注目的广告、特效或游戏等,可起到很好的引流作用。在空间开阔且客流密集的场所,使用各种形态的大面积屏幕&a…

Win10安装Gogs保姆级教程

什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 开发目的 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X…

音视频直播核心技术

直播流程 采集: 是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,比如 iOS、Android、Mac、Windows 等。 前处理:主要就是美颜美型技术,以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…

C++11特性:共享智能指针

在C中没有垃圾回收机制,必须自己释放分配的内存,否则就会造成内存泄露。解决这个问题最有效的方法是使用智能指针(smart pointer)。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控…

2. 创建型模式 - 抽象工厂模式

亦称: Abstract Factory 意图 抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。 问题 假设你正在开发一款家具商店模拟器。 你的代码中包括一些类, 用于表示: 一系列相关产品&…

【单调栈】LeetCode2334:元素值大于变化阈值的子数组

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 题目 给你一个整数数组 nums 和一个整数 threshold 。 找到长度为 k 的 nums 子数组,满足数组中 每个 元素都 大于 threshold / k 。 请你返回满足要求的 任意 子数组的 大小 。如果没有这…

Java对接腾讯多人音视频房间回调接口示例

在前面我们已经对接好了腾讯多人音视频房间相关内容:Java对接腾讯多人音视频房间示例 为了完善业务逻辑,我们还需要对接它的一些回调接口 官方文档地址 主要就下面这些 这里因为比较简单直接上代码 里面有些工具类和上一章一样这里就没贴,需要…