目录
学习目标
成果展示
硬件知识
代码
总结
学习目标
成果展示
预备知识
代码
总结
学习目标
我们今天来学习有关MicroPython的知识点,相比于用C语言来开发,MicroPython有许多的优点,比如可以交互,有大量的库可以调用等等,对于我们程序的编写带来了极大的便捷。我们使用的开发板是ESP32,本身是国产芯片,而且还自带WIFI和蓝牙模块,目前使用起来感觉良好,本次实验我们先点亮LED灯和使用PWM来实现呼吸灯的效果,好了,就让我们开始今天的学习吧!
成果展示
led
pwm呼吸灯
硬件知识
关于GPIO和PWM的知识介绍在51和32都有详细介绍,在此就不再赘述,有不懂的同学可以去看看我之前的笔记。在此就简单贴出代码。关于烧录芯片资料什么的,网上都有教程,在此就不再详细介绍。
首先在运行里面找到配置解释器 ,打开后选择ESP32,然后点击下面一行英文去烧录在官网下载的ESP32固件,就完成了基本的配置。
代码
import machine
import time
# 设定GPIO引脚
pin2 = machine.Pin(2, machine.Pin.OUT)
while True:
pin2.value(1) # 亮
time.sleep(1) # 等1秒
pin2.value(0) # 灭
time.sleep(1) # 等1秒
from machine import Pin, PWM
import time
# 设置PWM引脚ao
led2 = PWM(Pin(2))
# 设置频率
led2.freq(1000)
while True:
for i in range(0, 1024, 1):
# 逐渐调节占空比
led2.duty(i)
time.sleep_ms(3)
for i in range(1023, -1, -1):
# 逐渐调节占空比
led2.duty(i)
time.sleep_ms(3)
总结
虽然之前就想用MicroPython 去开发硬件,但是一直没有上手,当接触之后,确实觉得比以前的51和32要简单许多,但是感觉学完C语言开发后能更好的去理解MicroPython,目前先简单学习一下,等到后面再去细细深究。
学习目标
之前我们就介绍过,ESP32自带WIFI和蓝牙模块,所以我们今天就来介绍一下如何使用MicroPython来连接WIFI,从而实现单片机与电脑通信,最后我们将要实现通过我们电脑发送数据来实现开关灯的效果。
成果展示
WiFi控制开关灯
预备知识
这个的话,我们需要对于UDP有一个基本的认知。然后我们选择的是STA模式,我们来简单介绍一下STA模式。
- Access Point(
AP
) 无线接入点,提供无线接入的设备,家里的光猫就是结合WiFi和internet路由功能的AP。AP和AP可以相互连接。- Station(
STA
) 无线终端,连接到AP的装置,手机,电脑等需要联网的设备都是出于STA模式,这个模式不允许其他设备接入然后我们就使用相应的库来实现网络连接功能。代码如下
代码
# 连接WiFi
import network
wlan = network.WLAN(network.STA_IF) # 选择STA模式
wlan.active(True) # 开始工作
wlan.scan() # 扫描WiFi
wlan.isconnected() # 判断是否连接
wlan.connect('essid', 'password') # 这个就是账号,密码
wlan.config('mac') # 获取 MAC 地址
wlan.ifconfig() # 获得信息
from socket import *
# 1. 创建udp套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 2. 准备接收方的地址
dest_addr = ('192.168.43.27', 8080)
# 3. 从键盘获取数据
send_data = "hello world"
# 4. 发送数据到指定的电脑上
udp_socket.sendto(send_data.encode('utf-8'), dest_addr)
# 开灯的代码
import network
import time
import socket
import machine
def do_connect():
# 1. 连接wifi
# 1.1. 设置为STA模式
wlan = network.WLAN(network.STA_IF)
# 1.2. 使其工作
wlan.active(True)
# 1.3. 是否连接工作
if not wlan.isconnected():
print('connecting to network...')
# 1.4. 连接WiFi
wlan.connect('esp', '123456798')
i = 1
while not wlan.isconnected():
print("正在连接...{}".format(i))
i += 1
time.sleep(1)
# 1.4. 输出相应信息
print('network config:', wlan.ifconfig())
def start_udp():
# 2. 启动网络功能(UDP)
# 2.1. 创建udp套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2.2. 绑定本地信息
udp_socket.bind(("0.0.0.0", 7788))
return udp_socket
def main():
# 1. 链接wifi
do_connect()
# 2. 创建UDP
udp_socket = start_udp()
# 3. 创建灯对象
led = machine.Pin(2, machine.Pin.OUT)
# 4. 接收网络数据
while True:
recv_data, sender_info = udp_socket.recvfrom(1024)
# 4.1. 解码
recv_data_str = recv_data.decode("utf-8")
try:
print(recv_data_str)
except Exception as ret:
print("error:", ret)
# 5. 处理接收的数据
if recv_data_str == "开灯":
print("这是要开灯的代码...")
led.value(1)
elif recv_data_str == "关灯":
print("这是要关灯的代码...")
led.value(0)
# 只有直接运行代码时才执行
if __name__ == "__main__":
main()
总结
今天我们使用MicroPython实现了接入WiFi的操作,并且使得单片机与电脑通信,让电脑去控制单片机的功能。其中涉及到的通信知识,其实我也不是特别清楚,只是在Java里面学过一点,到时候我再去学习。