当前位置: 首页 > news >正文

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

相关文章:

MicroPython+ESP32 C3开发上云

传感器PinI/O状态D412输出1开0关D513输出1开0关 概述 MicroPython是python3编程语言的精简实现,能够在资源非常有限的硬件上运行,如MCU微控制器Micropython的网络功能和计算功能很强大,有非常多的库可以使用,它为嵌入式开发带来了…...

动态 SQL

动态 SQL 是 MyBatis 的强大特性之一&#xff0c;能够完成不同条件下不同的 sql 拼接。也就是说执行的 SQL 语句并不是固定的&#xff0c;而是不同人的不同操作执行的语句会有所差异。MyBatis 通过使用 标签 的方式来实现这种灵活性的。 <if>标签 例如在有一些网站进行…...

功能强大的多功能文档转换工具Neevia Document Converter Pro 7.5.0.241

Neevia Document Converter Pro是一款功能强大的Windows软件,旨在将文档转换为各种格式,包括PDF、TIFF、JPEG和许多其他格式。该程序专为在企业环境中使用而设计,提供文档转换和处理过程的自动化,这使其成为处理大量文档的组织的***工具。 Neevia Document Converter Pro的…...

从零到一,深入浅出大语言模型的奇妙世界

2022 年底&#xff0c;OpenAI 发布的 ChatGPT 模型在全球范围内引起了巨大轰动。本文详细的介绍了大语言模型的发展历程、构建过程和大语言模型如何使用等知识&#xff0c;帮助大家搞懂大语言模型。 一、大语言模型发展历程 大模型技术并不是一蹴而就的&#xff0c;大语言模型…...

ESP8266发送WOL幻数据包实现电脑远程唤醒

计算机远程唤醒&#xff08;Wake-on-LAN, WOL&#xff09; 计算机远程唤醒&#xff08;Wake-on-LAN&#xff0c;简称 WOL&#xff09;是一种局域网唤醒技术&#xff0c;可以将局域网内处于关机或休眠状态的计算机唤醒至引导&#xff08;Boot Loader&#xff09;或运行状态。无…...

用一个ESP32S3-Zero把有线键盘变为无线

三脚猫最近一直琢磨&#xff0c;那些喜欢买剪线键盘&#xff0c;以及自制键盘瞎折腾的人都是怎么搞的。经过不懈努力&#xff0c;终于想明白除了直接的硬件一个个pin针的高低电压判断后转给蓝牙&#xff0c;拿到现成的古董剪线键盘还有一个方式其实是在usb host转发给蓝牙类似这…...

Redis 7.x 系列【3】多种连接方式

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. Redis Cli3. 可视化管理工具3.1 Redis Insight3.2 RedisDesktopManager 4. …...

数据结构(DS)C语言版:学习笔记(4):线性表

参考教材&#xff1a;数据结构C语言版&#xff08;严蔚敏&#xff0c;吴伟民编著&#xff09; 工具&#xff1a;XMind、幕布、公式编译器 正在备考&#xff0c;结合自身空闲时间&#xff0c;不定时更新&#xff0c;会在里面加入一些真题帮助理解数据结构 目录 2.1线性…...

Linux 命令大全

Linux 命令大全 Linux是一个强大的操作系统,它通过命令行界面提供了丰富的功能和灵活性。了解和掌握各种Linux命令对于系统管理员和开发者来说至关重要。本文将为您提供一个全面的Linux命令大全,帮助您更好地理解和使用Linux系统。 基础命令 ls - 列出目录内容。cd - 更改当…...

[华为北向网管NCE开发教程(6)消息订阅

1.作用 之前介绍的都是我们向网管NCE发起请求获取数据&#xff0c;消息订阅则反过来&#xff0c;是网管NCE系统给我们推送信息。其原理和MQ&#xff0c;JMS这些差不多&#xff0c;这里不过多累述。 2.场景 所支持订阅的场景有如下&#xff0c;以告警通知为例&#xff0c;当我…...

2024.6.15 英语六级 经验与复盘

文章目录 英语六级 经验与复盘2024年上半年六级考试(2024 6.8 - 6.15)前情提要&#xff1a;经验&#xff1a;作文&#xff1a;(30min)听力&#xff1a;(25min)SectionC(精细阅读) (30min)SectionB(段落匹配) (15min)SectionA(选词填空) (5min / 舍弃)翻译&#xff08;20min&…...

计算机专业的未来展望

身份角度一&#xff1a;一名曾经的计算机专业学生  作为一名曾经的计算机专业学生&#xff0c;我认为计算机相关专业仍然是一个值得考虑的选择。随着科技的飞速发展&#xff0c;计算机行业的需求只会越来越高&#xff0c;因此&#xff0c;无论是在就业前景还是个人发展方面&a…...

Shell变量的高级用法

在Shell编程中&#xff0c;变量的使用是至关重要的。初学者可能只使用最基本的变量赋值和调用&#xff0c;但Shell变量实际上有很多高级用法&#xff0c;可以极大地提升脚本的灵活性和效率。本文将介绍几种Shell变量的高级用法&#xff0c;帮助您更好地利用Shell脚本。 1. 参数…...

【Python/Pytorch - 网络模型】-- SVD算法

文章目录 文章目录 00 写在前面01 基于Pytorch版本的SVD算代码02 理论知识 00 写在前面 &#xff08;1&#xff09;矩阵的奇异值分解在最优化问题、特征值问题、最小二乘方问题、广义逆矩阵问题及统计学等方面都有重要应用&#xff1b; &#xff08;2&#xff09;应用&#…...

全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展

技术背景 F5G-A&#xff08;Fifth Generation Fixed Network-Advanced&#xff0c;第五代固定网络接入&#xff09;是固定网络技术的一次重大升级&#xff0c;代表了光纤网络技术的最新发展。F5G-A旨在提供更高的带宽、更低的延迟、更可靠的连接以及更广泛的应用场景。 F5G-A六…...

港科夜闻 | 香港科大与香港科大(广州)合推红鸟跨校园学习计划,共享教学资源,促进港穗学生交流学习...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与香港科大(广州)合推“红鸟跨校园学习计划”&#xff0c;共享教学资源&#xff0c;促进港穗学生交流学习。香港科大与香港科大(广州)6月14日共同宣布推出“红鸟跨校园学习计划”&#xff0c;以进一步加强两校学…...

基于Wireshark实现对FTP的抓包分析

基于Wireshark实现对FTP的抓包分析 前言一、虚拟机Win10环境配置二、FileZilla客户端的安装配置下载FileZilla客户端安装FileZilla 三、FileZilla Server安装下载FileZilla Server安装 四、实现对FTP的抓包前置工作实现抓包完成抓包 前言 推荐一个网站给想要了解或者学习人工智…...

Vue54-浏览器的本地存储webStorage

一、本地存储localStorage的作用 二、本地存储的代码实现 2-1、存储数据 注意&#xff1a; localStorage是window上的函数&#xff0c;所以&#xff0c;可以把window.localStorage直接写成localStorage&#xff08;直接调用&#xff01;&#xff09; 默认调了p.toString()方…...

Linux下Shell脚本基础知识

主要参考视频&#xff1a; 这可能是B站讲的最好的Linux Shell脚本教程&#xff0c;3h打通Linux-shell全套教程&#xff0c;从入门到精通完整版_哔哩哔哩_bilibili 主要参考文档&#xff1a; Shell 教程 | 菜鸟教程 (runoob.com) Bash Shell教程 (yiibai.com) 先用视频入门&…...

爬虫初学篇——看完这些还怕自己入门不了?

初次学习爬虫&#xff0c;知识笔记小分享 学scrapy框架可看&#xff1a;孤寒者博主的【Python爬虫必备—&#xff1e;Scrapy框架快速入门篇——上】 目录&#x1f31f; 一、&#x1f349;基础知识二、&#x1f349;http协议&#xff1a;三、&#x1f349;解析网页(1) xpath的用…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...