Raspberry Pi Pico W上手(基于Arduino IDE及Thonny)

Beetle ESP32-C3开发应用

系统:Windows 11

Arduino:1.8.19

Arduino开发环境配置

1、添加IDE中的json链接

在线配置1

img

img

img

2、下载主控的核心

img

img

img

img

img

3、选择开发板以及串口

img

img

img

4、 拼人品的时候到了,你可能会发现下载十分慢,且很大概率下载到一半就失败。而且甚至连开发板的json文件都获取失败,在开发板管理器中,无法搜索到esp32。那么这时候我们就需要离线下载

离线配置

1、 先下载好esp32开发板json文件。步骤和【在线配置】相同,注意将json链接换成2https://www.arduino.cn/package_esp32_index.json

img

2、 然后下载各个ESP32开发板包,开发板工具包。下载完成后将json文件移动至【C:\Users\你的用户名\AppData\Local\Arduino15】;

img 将esp32开发板包和开发板工具包移动至【C:\Users\你的用户名\AppData\Local\Arduino15\staging\packages】,没有这一个文件夹请自行新建。 img

img

img

3、 最后开始安装开发板数据包【Arduino IDE→开发板→开发板管理器→ESP32→安装】

img

Blink with Wi-Fi

ESP32 是一款出色且非常流行的处理器,用于许多应用上都在使用。 对于支持Wi-Fi的板,如 ESP32,Web 工作流程允许使用 Web 浏览器通过本地网络连接到运行 CircuitPython 的开发板。现在很容易使用 REPL 或使用浏览器上传/下载文件! 本文介绍了如何在Beetle ESP32-C3上启动和运行 CircuitPython Web 工作流程。

安装CircuitPython

1、 下载固件

从CircuitPython网站上查找对应的固件链接.

2、 固件安装

一般CircuitPython固件安装可以直接将.UF2文件拖到文件夹里,可以直接加载程序.bin文件(比如Raspberry Pico)。不过有些开发板没有拖放到文件夹选项。这时候Web Serial ESPTool就是个不错的工具。

3、 启动Web Serial

必须使用基于Chrome或Chromium的浏览器才能正常工作。例如,Edge 和 Opera 是 Chromium。不支持 Safari 和 Firefox 等——它们还没有实现 Web Serial功能。 启用Serial API非常简单。 在 Chrome 中访问chrome://flags。查找并启用实验性网络平台功能,重启 Chrome。 img

4、 在使用该工具之前,您需要将开发板置于引导加载程序模式并进行连接。

img

请记住,您应该移除所有其他 USB 设备,以便仅连接目标板,这样就不会混淆多个端口! 在某些系统(例如 MacOS)上,列表中可能会显示其他系统端口。 img

img

5、擦除功能

img

6、 固件下载

img

img

img

Wi-Fi点灯

1、 使用Thonny创建.env文件

首先需要安装Thonny软件,一款Python的轻量IDE。

2、在Thonny中,打开【工具】 ->【** 选项】对话框并选择【解释器】选项卡,根据需要将解释器设置为 **CircuitPython(通用)和** COM 端口**。

img

3、 新建文件并输入

1
2
3
CIRCUITPY_WIFI_SSID= 'wifissid' 
CIRCUITPY_WIFI_PASSWORD= 'wifipassword' 
CIRCUITPY_WEB_API_PASSWORD= 'webpassword'

img

点击保存到【CircuitPython Device】,保存文件名为【.env】。现在 .env文件显示在 CircuitPython上。

img

4、在网页端编辑代码

img

输入在 .env 文件中设置的CIRCUITPY_WEB_API_PASSWORD密码,将用户名留空。

img

img

1
2
3
4
5
6
7
8
9
10
11
12
import time
import board
from digitalio import DigitalInOut, Direction

led = DigitalInOut(board.D10)
led.direction = Direction.OUTPUT

while True:
    led.value = True
    time.sleep(1)
    led.value = False
    time.sleep(1)

确保没有缩进错误等。然后单击“Save”按钮。此时代码应该正在运行并且Beetle板开始闪烁啦。 在实际运行之前点击“保存”按钮后可能会有一小段延迟。(注意哦是修改code.py程序)

Measure with Encoder (MicroPython)

旋转编码器是一种特殊类型的开关,它将开关的运动(顺时针或逆时针)转换为输出信号,可用于确定旋钮旋转的方向。与仅能旋转约3/4 圈的电位器相比,旋转编码器能够连续旋转 !

旋转编码器最适合使用位置变化而不是精确位置的情况。应用广泛,例如手动音量控制或汽车音响调节等。

本文中使用机械电刷式增量旋转编码器。它有三个引脚:ACBCAB 的公共地。AB 是信号引脚。当您旋转旋钮时,A 和 B 会与公共接地引脚接触,具体顺序取决于您旋转旋钮的方向。当每个引脚与公共地接触时,它们会产生一个信号。当一个引脚在另一个引脚之前连接时,这些信号彼此异相(正交编码)。我们需要检测这些引脚及其脉冲方式,从而确定方向和步数。

img

顺时针旋转时,首先连接 A 引脚,然后连接 B 引脚。逆时针旋转时,B 引脚先连接,然后 A 引脚连接。通过跟踪每个引脚何时连接和断开接地,我们可以使用信号变化来确定旋钮旋转的方向。它们更改的顺序取决于旋钮的旋转方向。从而我们将旋转编码器跟踪信号变化作为增量输入。(编码器详细介绍可以参见下面这篇文档)

旋转编码器原理、选型及编码 · 语雀

硬件

img

软件

环境搭建

如果是在C语言中,可以用Arduino编写代码来手动跟踪这些信号变化,并确定旋转方向和增量变化。对于本文,我们可以通过MicroPython较简便地编写程序[1]。

microPython固件

点击下载烧录工具

点击下载esptool Flash烧录工具

运行【flash_download_tool_3.9.3.exe】,选择【ESP32-C3】主控,然后将Beetle ESP32-C3的引脚9连接GND,然后通过USB线连接电脑。

img

选择下载的固件,擦除flash后烧录固件

img

进入软件,对解释器进行设置【Run->Configure interpreter…】

点击下载thonny

img

至此环境搭建完毕。

代码

首先我们导入我们需要的库machine和machine。这些都内置在MicroPython 中,不需要任何外部库文件。

接下来,我们创建要在我们的代码中驱动编码器。首先要定义已引脚并将其初始化。我使用的是引脚0、引脚1和 引脚4。

1
2
3
right = Pin(4, Pin.IN)
left =  Pin(1, Pin.IN)
down =  Pin(0, Pin.IN)

然后设置旋转标志位right_assist来识别旋转编码器何时移动,以及计旋转数变量count。

以及设置识别引脚电平状态下降沿的中断函数,其中4号引脚的下降沿作为旋转方向的判断标准,将旋转标志位right_assist置1,0号引脚的下降沿用来将计数count清零:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def right_handler(pin):
    global right_assist
    right.irq(handler=None)
    right_assist = 1


def down_handler(pin):
    down.irq(handler=None)
    count = 0
    print("down",count)
    down.irq(trigger = Pin.IRQ_FALLING, handler=down_handler)


right.irq(trigger = Pin.IRQ_FALLING, handler=right_handler)
down.irq(trigger = Pin.IRQ_FALLING, handler=down_handler)

最后进入循环中,不停判断旋转标志位right_assist的值,并将计数count的值输出到终端里。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def right_handler(pin):
    global right_assist
    right.irq(handler=None)
    right_assist = 1

def down_handler(pin):
    global count
    down.irq(handler=None)
    count = 0
    print("down",count)
    down.irq(trigger = Pin.IRQ_FALLING, handler=down_handler)


right.irq(trigger = Pin.IRQ_FALLING, handler=right_handler)
down.irq(trigger = Pin.IRQ_FALLING, handler=down_handler)


while True :
    if (right_assist == 1 ):
        
        if (left.value() == 1 ):
            count = count - 1
            print("left",  count)

        elif (left.value() == 0 ):
            count = count + 1
            print("right",  count)
            
        while (left.value() == 0 ) | (right.value() == 0):
            utime.sleep_ms(1)
            
        right_assist = 0
        right.irq(trigger= Pin.IRQ_FALLING, handler=right_handler)

参考

  1. DFROBOT:Beetle ESP32 C3
  2. Arduino IDE 离线添加开发板
  3. Arduino core for the ESP32 安装失败问题处理方法
  4. [活动]【免费试用】Beetle ESP32-C3试用
  5. FIREBEETLE BOARD-ESP32用户使用手册V0.1
  6. 硬件原理图
  7. CircuitPython on ESP32 Quick Start
  8. MicroPython 玩转硬件:串口小实验
  9. 启明云端分享:esp32c3阿里云连接测试步骤
  1. https://wiki.dfrobot.com.cn/_SKU_DFR0868_Beetle_ESP32_C3 

  2. https://blog.csdn.net/qq_21049619/article/details/122935550 

  3. https://blog.csdn.net/Naisu_kun/article/details/114582503