忙碌的死龙 发表于 2023-6-2 12:13:45

Beetle ESP32-C3的CircuitPython入门课

本帖最后由 忙碌的死龙 于 2023-6-2 12:17 编辑

前言

很高兴有机会参加本次试用活动。这是一个宝贵的机会,我将尽心尽力,准备充分,并以专业和客观的态度完成评测任务,期待在本次评测中做出有益的贡献。
开发板简介

本次试用的Beetle ESP32-C3 是一款基于 ESP32-C3 芯片的微型开发板,支持 Wi-Fi 和蓝牙连接,适用于物联网应用和原型设计。它具有小尺寸、丰富的引脚和多种电源选项,可通过 Arduino IDE、MicroPython 或 CircuitPython 进行编程和开发。它是一个功能强大、易于使用的开发板,适合构建各种连接的物联网设备和项目。开发板实物照片如下图:
开发语言选择

由于个人时间安排问题,本次项目开发时间有限,我选择使用CircuitPython开发本次项目。选择CircuitPython有几个原因。首先,它提供了易于使用和学习的编程语言,对于我来说是一个有利的因素。其次,CircuitPython提供了丰富的库和模块,涵盖了各种硬件和外设的驱动,使得与硬件的交互变得更加简单和高效。这对于项目的快速原型设计和开发非常重要。CircuitPython的高效开发和调试环境可以帮助我更快地实现项目的核心功能。同时,CircuitPython社区也提供了丰富的文档和示例代码,可以作为参考和学习的资源。尽管使用CircuitPython可能在某些方面有一些限制,但考虑到我的时间限制和个人技能,它是我能够快速交付项目的最佳选择。
通过CircuitPython官网快速烧录固件

CircuitPython提供了非常方便的web安装和配置方式,可以让用户轻松完成固件烧录和web开发环境的使用。以下为步骤描述。   1. 将你的Beetle ESP32-C3连接到电脑(保持短接IO9和GND后再插入USB),IO9接地上电,设备会进入ISP下载模式,否则无法烧录设备。一定要短接IO9和GND后,再插入USB,否则无法进入ISP下载模式。

   2. 打开你的浏览器并访问 Adafruit CircuitPython 的官方网站提供的beetle-esp32-c3固件地址(https://circuitpython.org/board/beetle-esp32-c3/)。
   3. 在该下载页面上,点击带魔法棒图标的 OPEN INSTALLER 的按钮。

4. 在弹出界面选择第一个蓝色的链接Full CircuitPython 8.1.0 Install,然后在新窗口选择Next按钮(只是提醒该web烧录工具可能不稳定,不需要管)

5. 在新窗口选择Connect按钮,选择正确的串口,点Next,然后会弹出一个警告,提示你烧录固件会遗失所有数据,不用管,选择Continue按钮继续。

6. 然后就会自动下载固件,下载完成后就自动烧录到flash了。烧录完毕后会弹出新窗口提示烧录完成,烧录完成点击close按钮即可。



配置wifi信息和登录密码(web编辑器用)

[*]接下来把开发板的USB线拔出,断开电源,然后重新插入USB(不需要短接IO9和GND)。让设备重新上电启动(板子上没带rst按钮,重新插拔简单一些)。重新上电后,开发板上的蓝色LED会短暂亮起两次,这是cpy开机和运行用户代码的led提示灯。
[*]再次点击OPEN INSTALLER 的按钮,这次我们选择第三个蓝色的链接Update WiFi credentials,更新wifi信息和web登陆配置。在信息页面同样选Next,然后在下一个页面选择串口设备后点击Next。



3. 然后在新的窗口填写2.4G wifi的名称和密码(2.4G,2.4G,2.4G 重要的事情说三遍),最后填写web编辑器的登陆密码,上传代码和库需要用到(重要,必须记住,忘记了可以用同样步骤重新设置一遍wifi信息)。端口保持80端口即可,不需要修改,填完选Next继续。



4. 然后页面会弹出一个窗口提示等待获取IP,成功获取到IP后,就可以通过CircuitPython.local,或者IP地址/code链接来打开web编辑页面了(建议使用后者,更稳定)。




CircuitPython的web编辑器介绍


[*]通过IP地址/code链接来打开web编辑页面,稍等一会儿(有时快有时慢),在首次登录时需要输入密码(不需要输入用户名!!!),输入密码后就可以开始使用了。如果没有关闭浏览器,重新通过链接打开编辑页面,是可以免登录直接操作的。


2. 成功连上开发板后,会弹出开发板信息面板,关闭即可。



3. 然后就可以开始使用web编辑器了,串口输出建议直接用web这边的,重启设备会自动重连。常见功能见下图。



4. save-as按钮点开后,常见功能见下图




接下来,我们学习一下最简单的点灯程序
使用CircuitPython实现点灯


[*]在web编辑器打开code.py文件,详见下图






[*]然后复制以下代码,替换code.py里的所有内容,并点击save按钮
import time
import board
import digitalio

led = digitalio.DigitalInOut(board.IO10)
led.direction = digitalio.Direction.OUTPUT

while True:
    led.value = True
    print("LED on!")
    time.sleep(0.5)
    led.value = False
    time.sleep(0.3)
    print("LED off!")
[*]然后点击Serial按钮,查看输出内容,正常情况下,开发板上的LED就开始闪烁,串口也有内容输出。



[*]代码解析 点灯代码非常简单,使用的都是cpy的内置库,所以不需要上传任何库文件。
import time
import board
import digitalio首先导入time(延时),board(IO定义),digitalio(配置数字输出模式)led = digitalio.DigitalInOut(board.IO10)
led.direction = digitalio.Direction.OUTPUT创建一个led实例,指定引脚,并配置引脚输入输出模式(目前配置为输出)while True:
    led.value = True
    print("LED on!")
    time.sleep(0.5)
    led.value = False
    time.sleep(0.3)
    print("LED off!")然后创建一个死循环,在这个循环里,不断重复给led的值赋值1和0,中间有延时和输出。 这样一个简单的点灯和输出信息的程序就写好了。

如何找到程序错误可以通过web编辑器的串口输出功能找到错误位置,如下图,具体是什么错误需要自行分析,也有比较规范的提示,例如参数数量、参数类型错误,库找不到(需要上传到板子上),内存分配错误等等

接下来,我们学习一下如何使用CircuitPython的官方库,以及上传文件。
使用CircuitPython点屏


首先需要先到CircuitPython官网下载所有的库和案例代码。地址:(https://circuitpython.org/libraries)


打开页面后,下拉到几个长条形紫色按钮处,下载Bundle for Version 8.x(版本要和烧录的CircuitPython版本一致,例如烧录8.1版本,则下载8.x库),建议也把源码下载一下(可以使用源码库,也可以使用压缩后的Bundle库)。区别如下图。




解压缩后的Bundle库,重要的是lib和example两个目录,分别是官方库和案例。




然后我们打开web编辑器,按下图步骤操作





完成后的lib目录如图(imageload目录文件多,要等几秒)



然后复制以下代码到code.py,覆盖原有所有代码,并按下图将开发板和屏幕插入面包板即可点亮屏幕(效果如图)。由于C3没有PSRAM,不能加载更大的图片,只放了个小图。



import board
import busio
import digitalio
import displayio
from adafruit_st7789 import ST7789
import adafruit_imageload
import time
import pwmio

displayio.release_displays()

spi = busio.SPI(board.IO0, MOSI=board.IO1, MISO=board.IO10)
tft_cs = board.IO5
tft_dc = board.IO6

pwm = pwmio.PWMOut(board.IO7)
pwm.duty_cycle = 28000

display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=board.IO4)

display = ST7789(display_bus, width=240, height=280, colstart=0, rowstart=20)

# Load the sprite sheet (bitmap)
image, palette = adafruit_imageload.load("/2.png")
palette.make_transparent(0)

# Create a sprite (tilegrid)
grid = displayio.TileGrid(image, pixel_shader=palette)

# Create a Group to hold the sprite
group = displayio.Group()

# Add the grid to the Group
group.append(grid)

# Add the Group to the Display
display.show(group)
while True:
    pass
点亮屏幕后,也可以不显示任何内容,只使用以下代码初始化屏幕,这样CircuitPython可以在屏幕上显示错误信息和print输出内容(不建议输出太快,屏幕跟不上)


import board
import busio
import digitalio
import displayio
from adafruit_st7789 import ST7789
import pwmio

displayio.release_displays()

spi = busio.SPI(board.IO0, MOSI=board.IO1, MISO=board.IO10)
tft_cs = board.IO5
tft_dc = board.IO6

pwm = pwmio.PWMOut(board.IO7)
pwm.duty_cycle = 28000

display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=board.IO4)

display = ST7789(display_bus, width=240, height=280, colstart=0, rowstart=21)






囧大大王 发表于 2023-6-2 13:26:08

CircuitPython得封你个中国推广大使啊 点赞

发表于 2023-8-15 16:42:54

龙哥,我来了

忙碌的死龙 发表于 2023-8-17 10:23:20

坏 发表于 2023-8-15 16:42
龙哥,我来了

{:5_125:}哈哈哈

花生编程 发表于 2023-8-22 13:51:59

厉害厉害

花生编程 发表于 2023-8-22 13:53:05

赞赞赞赞赞!{:6_215:}{:6_209:}
页: [1]
查看完整版本: Beetle ESP32-C3的CircuitPython入门课