MicroPython+ESP32 C3开发上云

传感器PinI/O状态
D412输出1开0关
D513输出1开0关

概述

MicroPython是python3编程语言的精简实现,能够在资源非常有限的硬件上运行,如MCU微控制器
Micropython的网络功能和计算功能很强大,有非常多的库可以使用,它为嵌入式开发带来了一种新的编程方式和思维模式。嵌入式工程师不需要每次从最底层开始构建系统,可以直接从经过验证的硬件系统和软件架构开始设计,把重点放在应用层的开发上,降低了开发门槛,提高了开发效率。

合宙ESP32 C3外观及引脚分布

image.png

固件烧录

可使用在线网站进行固件烧录:https://dev.16302.com/tools/#/
image.png

GPIO相关知识

导入GPIO模块
from machine import Pin

创建一个GPIO对象
# 三种构造函数
# 2:引脚
# Pin.OUT:输出方向为:输出
#value=1: 高电平
#value=0: 低电平
led=Pin(2)
led=Pin(2,Pin.OUT)
led=Pin(2,Pin.OUT,value=1)

输入输出电频的两种方法
# 示例:2引脚输出高电频
from machine import Pin
led=Pin(2,Pin.OUT)
# 方法一:
led.value(1)
# 方法二:
led.on()# 示例:2引脚输出低电频
from machine import Pin
led=Pin(2,Pin.OUT)
# 方法一:
led.value(0)
# 方法二:
led.off()

延时相关知识点

导入延时模块
import time

延时三种级别
# 秒
time.sleep(1)
# 毫秒
time.sleep_ms(1)
# 微妙
time.sleep_us(1)

LED灯闪烁

from machine import Pin
import time
led = Pin(9,Pin.OUT,value=0)
while True:led.on()time.sleep(1)print("开")led.off()time.sleep(1)print("关")
# D4和D5交替闪烁
from machine import Pin
import time
led12 = Pin(12,Pin.OUT,value=0)
led13 =Pin(13,Pin.OUT,value=0)
while True:led12.off()led13.on()time.sleep(1)led12.on()led13.off()time.sleep(1)

PWM相关知识点

导入PWM模块
from machine import Pin,PWM

创建PWM对象

# 参数一:引脚
# 参数二:频率
# 参数三:占空比pwm1=PWM(Pin(2,Pin.OUT),freq=500,drty=512)

其他方法

image.png

PWM呼吸灯
from machine import Pin,PWM
import time 
# 判断状态:
# 0:1023到0
# 1:0到1023
open_off=0
pwmval=1023
pwm9=PWM(Pin(9,Pin.OUT),freq=500,duty=pwmval)
while True:if open_off==0:pwmval=pwmval-1if pwmval==0:open_off=1else:pwmval=pwmval+1if pwmval==1023:open_off=0pwm9.duty(pwmval)time.sleep_ms(1)

定时器相关知识点

导入Timer模块
from machine import Timer

创建一个定时器对象
ti= Timer(-1) # -1表示使用软件定时器
# 初始化定时器(单次循环和循环定时)
# 参数一:间隔 (单位毫秒)
# 参数二:工作模式,单次和循环
# 参数三:回调函数
ti.init(period=200,mode=Timer.ONE_SHOT,callback=funciton1)
ti.init(period=200,mode=Timer.PERIODIC,callback=funciton1)

其他函数

image.png

# 待验证from machine import Timer
tim=Timer(-1)
result =0
def Service_T(tim):global reusltresult =result+1print('当前秒数:',reuslt)tim.deinit()tim.init(period=1000,mode=Timer.PERIODIC,callback=Service_T)

DS18B20

导入模块
from machine import Pin
import onewire,ds18x20,time

创建单总线对象,将其作为参数创建DS18B20对象

ow=onewire.OneWire(Pin(5))
ds=ds18x20.DS18X20(ow)

温度采集基本流程
rows=ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for row in rows:ds.read_temp(row)

网络连接相关功能

网络模块network主要针对wifi,提供网络驱动和程序配置功能,可以很方便的进行参数设置和网络连接。

导入模块
import network
# WLAN类,提供了WIFI网络驱动
# 创建WLAN网络接口对象,支持两种网络接口
# 第一种:AP热点模式,作为服务器让其他WIFI客户端连接
ap=network.WLAN(network.AP_IF)
# 第二种(常用):普通客户端模式,连接到WIIF热点
sta=network_WLAN(network.STA_IF)

其他方法
action() # 激活或禁用网络接口
scan() # 扫描无线网络

image.png

扫描可用WIFI名称

import network
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
scan= wifi.scan()
for row in scan:print(row[0])
# # 结果:
# >>> %Run -c $EDITOR_CONTENT
# b'aaa'
# b'\xe4\xba\x91\xe8\xae\xa1\xe7\xae\x97\xe5\xb7\xa5\xe4\xbd\x9c\xe5\xae\xa4'
# b'JSJ'
# b'WZXY'
# b''
# b''
# b'JSJ'
# b'WZXY'
# b'WZXY'
# b'Tineco_0269'
# b'WZXY'
# b''
# b'\xe5\xa4\xa7\xe6\x95\xb0\xe6\x8d\xae\xe5\xb7\xa5\xe4\xbd\x9c\xe5\xae\xa4'
# b''
# b'JSJ'
# b''
# b'HUAWEI-JCQ262'
# b'FJXX-2.4G'
# b'TP-LINK_5CE4'
# b'TP-LINK_DD'
# b''
# b'WZXY'
# b''
# b'706'
# b'WZXY'
# b'TP-LINK_DD'
# b'CMCC-eqh6'
# >>> 

AP模式和config()方法
# 设置连接WIFI热点的名称、密码、信道
ap.config(essid='名称',password="密码",channel=1)
# 读取热点名称# 例
import network
ap=network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='aaa', password="12345678" )
# 查询名称
print(ap.config("essid"))

image.png

STA模式和ifconfig()方法
  1. 实践说明
    1. image.png
#ifconfig方法的参数:一个元组
# 元组中有四个参数分别是:ip/子网掩码、网关、dnsimport  network
sta= network.WLAN(network.STA_IF)
sta.active(True)sta.ifconfig(("192.168.1.1","255.255.255.0","192.168.1.254","8.8.8.8"))
# 不传参数使用该方法,则返回配置信息
print(sta.ifconfig())

image.png

接入WIFI网络

image.png

# connect(ssid,password) 方法连接网络
# disconnect() 断开网络
# isconnected() 查询网络状态
  1. 案例

image.png

import time,networksta = network.WLAN(network.STA_IP)
sta.active(True)
if not sta.isconnected():print("正在等待网络连接")sta.connect("aaa","12345678")while not sta.isconnected():pass
print(sta.ifconfig())
time.sleep(10)
sta.disconnect
print("网络已断开")

image.png

Socket相关知识

  1. 导入模块
import socket
  1. 构造函数
# 三个参数
# 参数一:socket_INET/socket_INET6
# 参数二:
TCP:socket.SOCK_STREAM
UDP: socket.SOCK_DGRAM
# 参数三:可选
socket()

image.png

  1. 其他方法
    1. image.png

WIFI模块登录新大陆云平台

登录新大陆云平台
  1. 建立物联网项目并添加设备
    1. 登录云平台:http://www.nlecloud.com
    2. 开发者中心》新建项目》(填写项目名称和选择联网方案)下一步》(填写网关名称、设备标识和选择通信方式)点击确定添加设备》完成。
  2. 根据设备标识和传输密钥封装登录数据包,发送到云平台后进行登录。
  3. 传输数据格式

    1. image.png
      | JSON键 | JSON值 | 说明 | 消息示例 |
      | — | — | — | — |
      | t | 1 | 固体数字1,代表连接请求 |
      |
      | device | 设备标识 | 在平台上添加设备时的设备标识:
      1) 新大陆网关:进入网关设置-》【参数设置】-》【系统参数】中的序列号
      2) 新大陆农业网关:浏览器登录农业网关设置页面-》【设备状态】中的设备编号
      3) 新大陆家居网关:进入平板的家居网关主界面,界面左上角的一行序列号
      4) 其它的MCU/SOC/网关/手机等设备:可自行输入一个唯一的标识用于与平台连接 | PF12345678 |
      | Key | 传输密钥 | 参考以下鉴权方式 |
      |
      | ver | 客户端代码版本号 | 可以是自己拟定的一组客户端代码版本号值 | V1.1 |
# device :为设备标识
# key: 为传输密钥{"t":1,"device":"f3234242f","key":"cac7287d416b48abbca2ad6428ec26be","ver":"v0.0.0.0"}

  1. image.png

import socket,time,network 
from machine import Pin
# 连接WIFI
print('设备上电成功',end='\n')
sta = network.WLAN(network.STA_IF)
ssid="aaa"
password="12345678"
sta.active(True)
if not sta.isconnected():print("正在进行网络连接中")sta.connect(ssid,password)while not sta.isconnected():passprint("WIFI:",ssid,"连接成功!")
print("======================")
# socket 连接并发送心跳包
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("121.37.241.174","8600"))
time.sleep(1)
s.send(b'{"t":1,"device":"f3234242f","key":"cac7287d416b48abbca2ad6428ec26be","ver":"v0.0.0.0"}')
msg = s.recv(256)
print(msg)# =socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 返回结果:
b'{"status":0,"t":2}\r'
  1. 效果图:

image.png
image.png

心跳包请求
  1. 心跳包是为了保持esp32_c3保持与云平台上的连接,在90秒内单片机与云平台无通信或没有心跳包时 ,云平台会自动与设备断开连接。
  2. 心跳请求是客户端周期性的向平台端发送心跳包,通知对方自己状态的一种机制。
  3. TCP协议的默认超时时间为1分钟,设备连接后,在超时期内无数据传输时,需要定期向平台端发送PING_REQ消息以保持连接,如果双方在固定1分钟时间内没有任何报文交互(包括此心跳报文),则服务端将主动关闭该连接。
import socket,time,network 
from machine import Pin
# 连接WIFI
print('设备上电成功',end='\n')
sta = network.WLAN(network.STA_IF)
ssid="aaa"
password="12345678"
sta.active(True)
if not sta.isconnected():print("正在进行网络连接中")sta.connect(ssid,password)while not sta.isconnected():passprint("WIFI:",ssid,"连接成功!")
print("======================")
# socket 连接并发送心跳包
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("121.37.241.174","8600"))
time.sleep(1)
s.send(b'{"t":1,"device":"f3234242f","key":"cac7287d416b48abbca2ad6428ec26be","ver":"v0.0.0.0"}')
msg = s.recv(256)
print(msg)
print("=========成功登录云平台==========")
# 发送心跳包
num=0
while True:num +=1s.send(b'$ok##')print("第",num,'次心跳包')# 解码打印print(s.recv(256).decode('utf-8'))time.sleep(10)
  1. 效果图

image.png
image.png

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

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

相关文章

react传参有哪些常用方法?--Props,Context API和Redux全局管理

在 React 中,父子组件之间的传参主要通过以下几种方式实现: 1) Props 传递:父子传参 2)Context API: 跨多层组件传递数据 3) Redux: 全局状…

计算机网络 —— 运输层(运输层概述)

计算机网络 —— 运输层(运输层概述) 运输层运输层端口号复用分用复用(Multiplexing)分用(Demultiplexing) 常用端口号页面响应流程 我们今天进入到运输层的学习: 运输层 我们之前学习的物理层…

pytorch基础

文章目录 一、环境准备1.1安装Anaconda1.2创建虚拟环境1.3准备CUDA1.4安装pytorch1.3安装Pycharm 二、全连接神经网络原理2.1整体结构2.2神经单元2.3激活函数2.3.1非线性性2.3.2Sigmoid函数2.3.3Tanh函数2.3.4ReLU函数2.3.5Leaky ReLU函数 2.4前向传播2.5损失函数与反向传播2.5…

5G智能运维趋势

随着5G技术的普及,网络运维面临着前所未有的复杂性和数据量挑战。智能运维通过人工智能、大数据分析、自动化工具等技术,为5G网络提供了高效的管理和优化手段。在网络性能优化、故障预测与管理、资源动态调度、安全管理和网络切片管理等方面,…

Python 全栈系列250 数据流实践

说明 之前好几个企业都提过飞机在飞的时候换发动机的例子,来比喻变革是多么无奈和危险。还有的说法更直接:不变等死,变就是找死,总得选一样。 后来我自己的体会也差不多是这样,总有一些窘境让你抉择:是忽忽…

[Shell编程学习路线]——if条件语句(单,双,多分支结构)详细语法介绍

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月17日7点50分 🀄️文章质量:95分 文章目录 ————前言———— 💯趣站&#x1f4af…

Python 显示笔记本电脑的电池状态和百分比

方法一: import psutil import psutil battery psutil.sensors_battery() if battery is None:print("No battery is found.")exit() print (battery) percentagebattery.percent print(f"Battery Percentage: {percentage}%")Battery的信息…

【K8s】专题五(3):Kubernetes 配置之 ConfigMap 与 Secret 异同

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、相同点 二、不同点 一、相同点 功能作用:ConfigMap 与 Secret 都用于存储…

数据结构错题答案汇总

王道学习 第一章 绪论 1.1 3.A 数据的逻辑结构是从面向实际问题的角度出发的,只采用抽象表达方式,独立于存储结构,数据的存储方式有多种不同的选择;而数据的存储结构是逻辑结构在计算机上的映射,它不能独立于逻辑结构而存在。数…

【JavaEE精炼宝库】多线程(5)单例模式 | 指令重排序 | 阻塞队列

目录 一、单例模式: 1.1 饿汉模式: 1.2 懒汉模式: 1.2.1 线程安全的懒汉模式: 1.2.2 线程安全的懒汉模式的优化: 二、指令重排序 三、阻塞队列 3.1 阻塞队列的概念: 3.2 生产者消费者模型&#xf…

GPU的工作原理

location: Beijing 1. why is GPU CPU的存储单元和计算单元的互通过慢直接促进了GPU的发展 先介绍一个概念:FLOPS(Floating Point Operations Per Second,浮点运算每秒)是一个衡量其执行浮点运算的能力,可以作为计算…

板凳----Linux/Unix 系统编程手册 25章 进程的终止

25.1 进程的终止:_exit()和exit() 440 1. _exit(int status), status 定义了终止状态,父进程可调用 wait 获取。仅低8位可用,调用 _exit() 总是成功的。 2.程序一般不会调用 _exit(), 而是调用库函数 exit()。exit() …

python-不定方程求解

[题目描述] 给定正整数 a,b,c。求不定方程axbyc 关于未知数 x 和 y 的所有非负整数解组数。输入: 一行,包含三个正整数 a,b,c,两个整数之间用单个空格隔开。每个数均不大于 1000。输出&#xff…

游戏中插入音效

一、背景音乐 准备:素材音乐 方法: 1、方法1: (1) 将背景音乐 bgAudio 拖放到Hierarchy面板 (2) 选中 bgAudio,勾选开始运行就播放、循环播放。调节音量(volume) 2、方法2: (1) Create Empty&#x…

【Android】安卓开发的前景

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

C# 设置PDF表单不可编辑、或提取PDF表单数据

PDF表单是PDF中的可编辑区域,允许用户填写指定信息。当表单填写完成后,有时候我们可能需要将其设置为不可编辑,以保护表单内容的完整性和可靠性。或者需要从PDF表单中提取数据以便后续处理或分析。 之前文章详细介绍过如何使用免费Spire.PDF…

【面试题】MySQL常见面试题总结

备战实习,会定期给大家整理常考的面试题,大家一起加油! 🎯 系列文章目录 【面试题】面试题分享之JVM篇【面试题】面试题分享之Java并发篇【面试题】面试题分享之Java集合篇(三) 注意:文章若有错…

WPF视频学习-简单应用篇图书馆程序(一)

1.登录界面和主界面跳转 先把登录界面分为三行《Grid》 先添加两行&#xff1a; <Grid><!--//分三行&#xff0c;行排列--><Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition Height"auto"/><RowDef…

m4s转mp3——B站缓存视频提取音频

前言 しかのこのこのここしたんたん&#xff08;鹿乃子乃子虎视眈眈&#xff09;非常之好&#xff0c;很适合当闹钟&#xff0c;于是缓存了视频&#xff0c;想提取音频为mp3 直接改后缀可乎&#xff1f;格式转换工具&#xff1f; 好久之前有记录过转MP4的&#xff1a; m4s转为…

Python自动化办公(一) —— 根据PDF文件批量创建Word文档

Python自动化办公&#xff08;一&#xff09; —— 根据PDF文件批量创建Word文档 在日常办公中&#xff0c;我们经常需要根据现有的PDF文件批量创建Word文档。手动操作不仅费时费力&#xff0c;而且容易出错。幸运的是&#xff0c;使用Python可以轻松实现这个过程。本文将介绍如…