【雕爷学编程】MicroPython手册之 ESP8266 WebREPL(网络浏览器交互提示)

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述

ESP8266是一种低成本的Wi-Fi芯片,它可以用于开发物联网、智能家居、网络控制等应用。不同的ESP8266芯片或模块可能有不同的参数,因此在使用或购买时,需要注意选择合适的型号和版本。以下是一些常见的ESP8266参数:

1、尺寸:ESP8266芯片的尺寸为5x5 mm,ESP8266模块的尺寸根据外围电路和天线的不同而有所差异,一般在10x15 mm到25x50 mm之间。
2、工作温度:ESP8266芯片的工作温度范围为-40125℃,ESP8266模块的工作温度范围一般为-4085℃。
3、处理器:ESP8266芯片内置了一个32位的Tensilica L106 RISC处理器,最高时钟频率为160 MHz,支持实时操作系统和Wi-Fi协议栈。
4、内存:ESP8266芯片内置了64 KB的指令RAM和96 KB的数据RAM,以及64 KB的boot ROM。ESP8266模块还需要外接一个Flash存储器,一般为512 KB到16 MB之间。
5、电源:ESP8266芯片的供电电压为3.0~3.6 V,最大功耗为170 mA,最小功耗为20 uA。ESP8266模块的供电电压一般为3.3 V或5 V,最大功耗一般为200~300 mA,最小功耗一般为10~20 uA。
6、通信协议:ESP8266芯片支持IEEE 802.11 b/g/n标准的Wi-Fi协议,支持Station、SoftAP和Station+SoftAP三种模式。ESP8266芯片还支持多种数字外设接口,如GPIO、PWM、ADC、UART、I2C、SPI等。ESP8266芯片还可以使用socket模块或其他协议库来实现TCP/IP、UDP、HTTP、MQTT等协议。
在这里插入图片描述
MicroPython的ESP8266 WebREPL(网络浏览器交互提示)是一种通过网页访问ESP8266上运行的MicroPython解释器的方式。

它的主要特点有:

无需连接USB线,只要ESP8266和电脑在同一个局域网内,就可以通过浏览器输入ESP8266的IP地址来访问WebREPL。
实时交互,可以在浏览器中输入MicroPython命令,立即看到执行结果。
文件管理,可以在浏览器中上传或下载ESP8266上的文件,也可以查看或编辑文件内容。

WebREPL的应用场景有:

教学,可以让学生在浏览器中学习和练习MicroPython编程,无需安装任何软件。
调试,可以在浏览器中测试和修改ESP8266上的程序,无需断开电源或重启。
远程控制,可以在浏览器中通过WebREPL发送命令或数据给ESP8266,实现对硬件设备的远程控制。

WebREPL需要注意的事项有:

启用WebREPL,需要在ESP8266上运行一次import webrepl_setup命令,设置一个密码,并重启ESP8266。
连接WebREPL,需要在浏览器中输入http://micropython.org/webrepl/来打开WebREPL客户端页面,并输入ESP8266的IP地址和密码来连接。
安全性,需要保证局域网内没有恶意用户,否则可能会被盗取密码或篡改文件。

以下是几个MicroPython的ESP8266 WebREPL(网络浏览器交互提示)实际运用程序参考代码案例:

案例1:闪烁LED,在WebREPL中输入以下代码,可以让ESP8266上的内置LED每隔一秒闪烁一次::

import machine
import time
led = machine.Pin(2, machine.Pin.OUT)
while True:
    led.value(not led.value())
    time.sleep(1)

案例2:显示温度,在WebREPL中输入以下代码,可以让ESP8266上连接的SSD1306 OLED显示屏显示当前的温度值(假设温度传感器为DS18B20,并连接到GPIO4)::

import machine
import ssd1306
import onewire
import ds18x20
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
ow = onewire.OneWire(machine.Pin(4))
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
while True:
    ds.convert_temp()
    temp = ds.read_temp(roms[0])
    oled.fill(0)
    oled.text('Temp: {:.1f} C'.format(temp), 0, 0)
    oled.show()

案例3:控制舵机,在WebREPL中输入以下代码,可以让ESP8266上连接的舵机根据从浏览器接收到的数据来转动角度(假设舵机为SG90,并连接到GPIO14)::

import machine
import socket
servo = machine.PWM(machine.Pin(14), freq=50)
servo.duty(40) # 初始角度为0度
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('0.0.0.0', 8888)) # 监听8888端口
while True:
    data, addr = s.recvfrom(1024) # 接收数据
    try:
        angle = int(data) # 将数据转换为整数
        if 0 <= angle <= 180: # 如果角度在0到180度之间
            duty = 40 + angle * 8 / 9 # 计算占空比
            servo.duty(int(duty)) # 设置占空比
    except:
        pass

案例4:控制LED灯:

import machine

led = machine.Pin(2, machine.Pin.OUT)

def toggle_led(request):
    if request == b'on':
        led.on()
        return 'LED turned on'
    elif request == b'off':
        led.off()
        return 'LED turned off'
    else:
        return 'Invalid request'

这个示例使用ESP8266的WebREPL功能控制LED灯的开关。首先,在WebREPL连接到ESP8266后,你可以将以下代码复制到WebREPL控制台中。代码通过machine.Pin类初始化LED引脚(例如Pin 2),然后定义了一个toggle_led函数,该函数接收请求并根据请求的内容开关LED灯。当请求为on时,将LED灯打开;当请求为off时,将LED灯关闭。返回相应的响应信息。

案例5:读取温度传感器数据:

import machine
import dht

dht_pin = machine.Pin(2)
dht_sensor = dht.DHT11(dht_pin)

def read_temperature():
    dht_sensor.measure()
    temperature = dht_sensor.temperature()
    return 'Temperature: {}C'.format(temperature)

def read_humidity():
    dht_sensor.measure()
    humidity = dht_sensor.humidity()
    return 'Humidity: {}%'.format(humidity)

这个示例使用ESP8266的WebREPL功能读取温度传感器(例如DHT11)的数据。在WebREPL连接到ESP8266后,将以下代码复制到WebREPL控制台中。代码通过machine.Pin类初始化传感器引脚(例如Pin 2),然后实例化dht.DHT11类来初始化DHT11传感器。定义了read_temperature函数和read_humidity函数,分别用于读取温度和湿度数据。在每次调用函数时,先使用measure()方法测量传感器数据,然后返回相应的温度或湿度信息。

案例6:PWM控制舵机:

import machine
import time

servo_pin = machine.Pin(2)
servo = machine.PWM(servo_pin)

def set_angle(angle):
    duty_cycle = int((angle / 180) * 1023)
    servo.duty(duty_cycle)
    time.sleep(1)

这个示例使用ESP8266的WebREPL功能通过PWM(脉冲宽度调制)控制舵机的角度。在WebREPL连接到ESP8266后,将以下代码复制到WebREPL控制台中。代码通过machine.Pin类初始化舵机引脚(例如Pin 2),然后实例化machine.PWM类来初始化PWM对象。定义了set_angle函数,用于设置舵机的角度。函数接收一个角度值,将其转换为相应的占空比,并使用duty()方法设置PWM的占空比。最后,使用time.sleep()方法设置延迟,以确保舵机有足够的时间到达目标角度。这些示例代码提供了使用MicroPython的ESP8266模块通过WebREPL进行交互的实际运用程序参考。请根据自己的需求和硬件配置进行适当的调整和修改。

案例7:在WebREPL中显示文本信息:

import machine
import ssd1306
import webrepl

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin, scl=scl_pin)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 连接WebREPL
webrepl.start()

# 清空显示屏
oled.fill(0)

# 显示文本
oled.text("Hello,", 0, 0)
oled.text("WebREPL!", 0, 10)

# 更新显示
oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用webrepl.start()连接WebREPL,以便在网络浏览器中进行交互。接下来,使用oled.fill()方法清空显示屏。然后,使用oled.text()方法在显示屏上显示文本信息。在示例中,我们显示了两行文本:"Hello,“和"WebREPL!”,分别位于坐标(0, 0)和(0, 10)处。最后,调用oled.show()方法更新显示屏,使文本显示生效。

案例8:在WebREPL中绘制图形:

import machine
import ssd1306
from ssd1306 import SSD1306_I2C
import webrepl

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin, scl=scl_pin)
oled = SSD1306_I2C(128, 64, i2c)

# 连接WebREPL
webrepl.start()

# 清空显示屏
oled.fill(0)

# 绘制矩形
oled.rect(10, 10, 40, 20, 1)

# 绘制圆形
oled.circle(80, 30, 10, 1)

# 更新显示
oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用webrepl.start()连接WebREPL,以便在网络浏览器中进行交互。接下来,使用oled.fill()方法清空显示屏。然后,使用oled.rect()方法绘制一个矩形,参数依次为左上角坐标(10, 10)、宽度(40像素)、高度(20像素)和颜色(1表示白色)。然后,使用oled.circle()方法绘制一个圆形,参数依次为圆心坐标(80, 30)、半径(10像素)和颜色(1表示白色)。最后,调用oled.show()方法更新显示屏,使图形显示生效。

案例9:在WebREPL中显示传感器数据:

import machine
import ssd1306
import webrepl
from machine import ADC

# 配置SSD1306引脚(例如引脚4和5)
sda_pin = machine.Pin(4)
scl_pin = machine.Pin(5)
i2c = machine.I2C(sda=sda_pin, scl=scl_pin)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

# 配置ADC引脚(例如引脚0)
adc = ADC(0)

# 连接WebREPL
webrepl.start()

while True:
    # 读取传感器数据
    sensor_value = adc.read()

    # 清空显示屏
    oled.fill(0)

    # 显示传感器数据
    oled.text("Sensor Value:", 0, 0)
    oled.text(str(sensor_value), 0, 10)

    # 更新显示
    oled.show()

在上述示例中,我们首先使用machine.Pin()创建两个引脚对象,用于配置SSD1306的SDA(数据)引脚(例如引脚4)和SCL(时钟)引脚(例如引脚5)。然后,使用machine.I2C()创建一个I2C对象,并将SDA引脚和SCL引脚作为参数传入。接下来,使用ssd1306.SSD1306_I2C()创建一个SSD1306_I2C对象,将屏幕的宽度(128像素)、高度(64像素)和I2C对象作为参数传入。然后,使用machine.ADC()创建一个ADC对象,并将传感器所连接的引脚(例如引脚0)作为参数传入。接下来,使用webrepl.start()连接WebREPL,以便在网络浏览器中进行交互。然后,使用一个无限循环来持续读取传感器数据并更新显示。在每次循环中,首先使用adc.read()方法读取传感器的值。然后,使用oled.fill()方法清空显示屏。接下来,使用oled.text()方法显示传感器数据。在示例中,我们显示了一行文本:“Sensor Value:”,位于坐标(0, 0),以及传感器的值,位于坐标(0, 10)。最后,调用oled.show()方法更新显示屏,使传感器数据显示生效。

请注意,以上示例仅供参考,具体的使用方法可能因不同的硬件平台和MicroPython版本而有所差异。在实际编程中,你需要根据你所使用的硬件和具体需求进行适当的调整。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值