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-1
        if pwmval==0:
            open_off=1
    else:
        pwmval=pwmval+1
        if pwmval==1023:
            open_off=0
        

    pwm9.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 reuslt
    result =result+1
    print('当前秒数:',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/子网掩码、网关、dns

import  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,network

sta = 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():
        pass

print("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():
        pass

print("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 +=1
    s.send(b'$ok##')
    print("第",num,'次心跳包')
    # 解码打印
    print(s.recv(256).decode('utf-8'))
    time.sleep(10)


  1. 效果图

image.png
image.png

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

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

相关文章

线程池监控是怎么做的?

引言:在现代软件开发中,线程池是一种重要的并发控制机制,它能有效管理和复用线程资源,提升系统的性能和响应速度。然而,随着应用规模的扩大和复杂性的增加,对线程池进行有效监控显得尤为重要。线程池监控不…

CentOS搭建kubernetes集群详细过程(yum安装方式)

kubernetes集群搭建详细过程(yum安装方式) Kubernetes,也被称为K8s,是一个多功能的容器管理工具,它不仅能够协调和调度容器的部署,而且还能监控容器的健康状况并自动修复常见问题。这个平台是在谷歌十多年…

基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析

植被是陆地生态系统中最重要的组分之一,也是对气候变化最敏感的组分,其在全球变化过程中起着重要作用,能够指示自然环境中的大气、水、土壤等成分的变化,其年际和季节性变化可以作为地球气候变化的重要指标。此外,由于…

服务器数据恢复—OceanStor存储中NAS卷数据丢失如何恢复数据?

服务器存储数据恢复环境&故障: 华为OceanStor某型号存储。工作人员在上传数据时发现该存储上一个NAS卷数据丢失,管理员随即关闭系统应用,停止上传数据。这个丢失数据的卷中主要数据类型为office文件、PDF文档、图片文件(JPG、…

[机器学习] Stable Diffusion初体验——基于深度学习通过神经网络的强大AI平台

文章目录 前言平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型,VAE,lora 介绍sd模型,vae,lora模型进入应用文生图工作区调参区图生图 结语 前言 在这个信息爆炸的时代,AI技术正以前所未有的速度发展着。图…

YonSuite银企直联:成长型企业数智转型的强力引擎

在当今数字化转型的浪潮中,成长型企业正面临着前所未有的发展机遇与挑战。在这场数字化转型的竞技场上,银企直联凭借其独特的优势,成为企业金融管理的重要利器,为企业带来前所未有的资金管理体验。用友YonSuite作为领先的数智化转…

物联网主机E6000:动环监控的全新解决方案!

物联网主机E6000在动环监控中的应用,标志着一场新的技术革命。随着科技的进步,特别是在物联网领域,数据采集和处理已经成为企业运营不可或缺的一环。 E6000作为一款支持多协议、多接口的全能型物联网主机,其在动环监控领域的应用…

Android-apk自动签名

一、创建apk签名 1、有得话忽略 Build->Generate Signed Bundle or APK,选择APK,然后Next,然后选择Create new 2、 2.在app/build.gradle中,在android{…}中添加以下内容 signingConfigs { release { storeFile file(androi…

docker-compose jira、bugzilla、zentao

参见文章,这里是对之前的内容进行了改动,主要讲怎么将zentao容器融入到已有的docker-compose.yml中 一、zentao镜像 从官网上拉取:https://hub.docker.com/r/easysoft/zentao/tags 可以选择自己想要的版本,这里我选择的是开源版…

盘点有趣的人工智能开源项目一

字幕导出 zh_recogn是一个专注于中文语音识别的字幕生成工具,基于魔塔社区Paraformer模型。它不仅支持音频文件,还能处理视频文件,输出标准的SRT字幕格式。这个项目提供了API接口和简单的用户界面,使得用户可以根据自己的需求灵活…

9.2.1 简述图像分割中经常用到的编码器-解码器网络结构的设计理念。

9.2 图像分割 场景描述: 图像分类图像识别图像分割不同标注出每个目标的类别像素级别的图像识别,标注出图像中每个像素所属的对象类别不同对整张图像进行识别进行稠密的像素级分类应用场景视频软件中的背景替换、避开人物的弹幕模板、自动驾驶以及医疗…

时序预测 | MATLAB实现TCN-Transformer时间序列预测

时序预测 | MATLAB实现TCN-Transformer时间序列预测 目录 时序预测 | MATLAB实现TCN-Transformer时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-Transformer时间序列预测; 2.运行环境为Matlab2023b及以上; 3.data为数…

微服务开发与实战Day07 - MQ高级篇

一、消息可靠性问题 首先,分析一下消息丢失的可能性有哪些。 消息从发送者发送消息,到消费者处理消息,需要经过的流程是这样的: 消息从生产者到消费者的每一步都可能导致消息丢失: 发送消息时丢失: 生产…

[个人感悟] 缓存应该考察哪些问题?

前言 缓存, 根据冯诺依曼计算机模型, 无非是为了更高效的交互, 使用内存IO替换本地磁盘IO. 又因为内存的稀缺性, 其必然存储的是热点数据, 且较小的数据. [虽然直至今日, 已有使用缓存作为数据库的使用, 但是与磁盘IO相比, 其价格仍是数倍之多.] 当涉及缓存问题时, 又分为本地…

java基础知识总结【markdown】

java基础知识总结【markdown】 开发工具Java数据类型浮点数使用陷阱: 2.7 和 8.1 / 3 比较 常用字符编码基本数据类型转换关键字,保留字**原码、反码、补码** 开发工具 editplus、notepad、Sublime Text、IDEA、Eclipse Java数据类型 浮点数使用陷阱: 2.7 和 8.1 …

开源复刻apple 数学笔记;纯C++实现了ChatGLM系列模型;腾讯混元文生图模型发布新版本并开源训练代码

✨ 1: AI Math Notes AI Math Notes 是一个交互式绘图应用,可绘制并计算数学方程。 AI Math Notes 受到Apple在WWDC 2024上的“Math Notes”演启发,开发的一个互动式绘图应用程序,用户可以在画布上绘制数学方程。一旦方程被绘制完成&#x…

英伟达发布Nemotron-4 340B通用模型:专为生成合成数据设计的突破性AI

引言 2023年6月14日,英伟达发布了Nemotron-4 340B通用模型,专为生成训练大语言模型的合成数据而设计。这一模型可能彻底改变训练大模型时合成数据的生成方式,标志着AI行业的一个重要里程碑。本文将详细介绍Nemotron-4 340B的各个方面&#x…

【Stable Diffusion教程】AI绘画工具SD如何安装使用?三种方法带你轻松上手!(附安装包和云端部署教程)

大家好,我是向阳 AI绘画专业工具Stable Diffusion在哪里用怎么安装?这一期给大家介绍三种使用SD的方法,无论你有没有专业显卡都能轻松上手SD哦~ 一、SD本地部署秋葉安装包安装方法 如果你有进一步的需求,想要学习SD…

MySQL Server和Server启动程序(二)

mysql.server — MySQL Server启动脚本 Unix和类Unix系统上的MySQL发行版包括一个名为MySQL.server的脚本,该脚本使用mysqld_safe启动MySQL服务器。它可以在Linux和Solaris等系统上使用,这些系统使用System V风格的运行目录来启动和停止系统服务。它也被…

HTTP 概述

HTTP 概述 HTTP 是一种用于获取资源(如 HTML 文档)的协议。 它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收方(通常是 Web 浏览器)发起。 一个完整的文档是从获取的不同子文…