前段时间参加了DF举办的ESP32-C3测试活动,拖到今天才交作文,真的感觉很对不起组织的信任和支持。真心觉得这是一个非常成功的活动,特别是要给“Beetle ESP32-C3免费试用活动群”点赞。虽然名字有点土,但是这个群里真的有很多热心大佬,不但懂的多,而且说话还好听。一不小心就有100多条未读信息,全方位无死角,可以说只要进了群,就不允许有一个人掉队。哪怕漏掉一个知识点都是对知识的亵渎。
言归正传,进入主题。本文主要分享一个小白拿到模块后,在群里各位大大的帮助下,如何实现“Hello world”的过程。
一、初次见面
打开黑色的小盒子,可以看到2块小而美的板子:ESP32-c3 和扩展板,还有2个排针。
ESP32-C3 正反面
ESP32扩展板 正反面
好嘛,既然看到排针就知道来活了,要自己学着把针脚焊上去。其实按其他大大的意思,也可以不焊的,用鳄鱼夹也是可以的。出于学习目的,我还是焊了。至于扩展板也不是必须的,你可以选择将焊上针脚的ESP32插在面包板上,也是挺方便的。因为我申请了两块,出于学习的目的,我还是焊了。不过我申请了2块,所以只焊了1块,扩展板和面包板的连接方式都可以体验一下。
二、焊接
DF的东西一如既往的非常精致,对我这个焊接小白来说,特别怕因技术太菜把东西弄脏弄坏,不过看到群里很多大大都动手了,我皱皱眉头也上了。因为焊上后,板子的引脚标识可能就会被锡盖住,所以我先拍照记录。用夹子夹着这样,比较好上手,但是注意夹子不要夹在板子不受力的地方,例如扩展板接显示屏数据线的塑料接口。
1) 排针接ESP32上,不需要用到扩展板,然后可以直接插面包板,再外接其他传感器。
2)排母接ESP32上,排针插扩展板上,然后再把两个板子合在一起
焊上排母的ESP32 C3
焊上排针的扩展板
接着我们把它们连接在一起,要注意ESP32 c3板子的GND和BAT要和扩展板的GND和BAT对应。
把排针、排母接在一起就完成了
三、测试
前面是热身,现在要给板子上程序。这里有个文档很重要,DF wiki这篇起码要读一遍,这里→https://wiki.dfrobot.com.cn/_SKU_DFR0868_Beetle_ESP32_C3#target_0.
因为我主要是想在C3上运行micropython,所以要给Beetle ESP32-C3烧录固件,这里直接看 《9.1 MicroPython环境搭建》就完事了,我就不当大自然的搬运工了。刷固件前需要将GND和9号脚短接。因为我的板子已经接排母了,所以我找了一条公公线,如果还没有焊接的同学,直接用个导线穿过两个孔也是可以的。
运行烧录工具 :flash_download_tool_3.9.3.exe,我刷的是这个esp32c3-usb-20220117-v1.18.bin。这部分操作比较顺利,先擦除(ERASE),然后上载(start) 就可以了。Thonny里面也带了一个“install or update fireware”的功能,出于学习的目的,我也试了,也是可以的。
接着打开thonny,在 “运行--选择解释器”,弹出窗口里选择板载解释器,选择端口,看到左侧的文件管理器下方出现板子里的文件结构,右侧出现命令行,说明已经成功了,可以准备上载程序。
我们接着来上个点灯的程序。因为范例已经有板载灯的例子,这里我们用外接模块的方式,可以是用面包板或者扩展板来实现。
用面包板:用了一颗led灯,长脚接了一个220欧的电阻,然后接到C3的5号脚,短脚连ND
用扩展板:把led模块插在扩展板的5号脚
代码是一样的,都可以正常闪烁。
import time
from machine import Pin
led = Pin(5,Pin.OUT)
while True:
led.value(1)
time.sleep(0.1)
led.value(0)
time.sleep(0.1)
接着再来试试其他好玩的。在TFT屏幕上显示一张图片。
用扩展板的方式
用面包板的方式
下面是代码,记得先要将ST7789.py 和 dfrobot.bmp两个文件上载到板子里。
from ST7789 import TFT,TFTColor
from machine import SoftSPI,Pin
import time
import math
spi = SoftSPI(baudrate=20000000,
polarity=1,
phase=0,
sck=Pin(0),
mosi=Pin(1),
miso=Pin(3))
tft=TFT(spi,aDC =6, aCS = 10, aReset = 4) # for skids
tft.initr()
tft.rgb(True)
lcd_w = 240
lcd_h = 240
f=open('dfrobot.bmp', 'rb')
if f.read(2) == b'BM': #header
dummy = f.read(8) #file size(4), creator bytes(4)
offset = int.from_bytes(f.read(4), 'little')
hdrsize = int.from_bytes(f.read(4), 'little')
width = int.from_bytes(f.read(4), 'little')
height = int.from_bytes(f.read(4), 'little')
if int.from_bytes(f.read(2), 'little') == 1: #planes must be 1
depth = int.from_bytes(f.read(2), 'little')
if depth == 24 and int.from_bytes(f.read(4), 'little') == 0:#compress method == uncompressed
print("Image size:", width, "x", height)
rowsize = (width * 3 + 3) & ~3
if height < 0:
height = -height
flip = False
else:
flip = True
w, h = width, height
if w > lcd_w: w = lcd_w
if h > lcd_h: h = lcd_h
tft._setwindowloc((0,0),(w - 1,h - 1))
colorData = bytearray(2*240)
for row in range(h):
if flip:
pos = offset + (height - 1 - row) * rowsize
else:
pos = offset + row * rowsize
if f.tell() != pos:
dummy = f.seek(pos)
colorDataIndex = 0
readBgrNum = 6
for col in range(0,w,6):
bgr = f.read(18)
bgrIndex = 0
for t in range(6):
color = ((bgr[bgrIndex+2] & 0xF8) << 8) | ((bgr[bgrIndex+1] & 0xFC) << 3) | (bgr[bgrIndex+0] >> 3)
colorData[colorDataIndex] = color >> 8
colorData[colorDataIndex+1] = color
colorDataIndex = colorDataIndex + 2
bgrIndex = bgrIndex + 3
tft._writedata(colorData)
我们再来测试一下mqtt的点灯。这里用行空板作为mqtt服务器,esp32-c3 作为mqtt 客户端连入,在行空板的web管理页面发送一个已定制主题和指令,控制esp32-c3连接的led的亮灭。
硬件链接还是把led接在Esp32扩展板的5号脚。
下面是客户端代码,打开Thonny,上载到ESP32上就可以了,用到的库放在文末附件里,记得也要上载进去。上载后就可以点击运行,连接到siot服务器上。
import time
from machine import Pin
import network
from umqttsimple import MQTTClient
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('wifi账户', 'wifi密码') # 更换为自己的wifi账号密码
i = 1
while not wlan.isconnected():
print("正在链接...{}".format(i))
i += 1
time.sleep(1)
print('network config:', wlan.ifconfig())
def sub_cb(topic, msg): # 回调函数,收到服务器消息后会调用这个函数
print(topic, msg)
# ---- 添加 --------
if topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "on":
led_pin.value(1)
elif topic.decode("utf-8") == "ledctl" and msg.decode("utf-8") == "off":
led_pin.value(0)
# ---- 添加 --------
# 1. 联网
do_connect()
# 2. 创建mqt
c = MQTTClient("umqtt_client", "192.168.2.34",0,"siot","dfrobot") # 建立一个MQTT客户端
c.set_callback(sub_cb) # 设置回调函数
c.connect() # 建立连接
c.subscribe(b"ledctl") # 监控ledctl这个通道,接收控制命令
# ---- 添加 --------
# 3. 创建LED对应Pin对象
led_pin = Pin(5, Pin.OUT) # 如果不是5号脚 记得要换成自己的
# ---- 添加 --------
while True:
c.check_msg()
time.sleep(1)
来看看测试效果,未发送指令前:
在浏览器中打开访问10.1.2.3,在应用开关里找到siot选项,打开管理页面。
在管理页面的“发送消息”,发送一个主题为"ledctl",内容为"on"的消息。这个步骤也可以用另一块板子做成另外一个客户端来发出消息。
在thonny的终端窗口可以看到接收到的消息。
当然ESP32上的led也亮起来了。反过来用off指令也可以关闭led灯。
附件
08buck2023.09.16
就会爆炸
08buck2023.09.16
就会爆炸
CHICKEN2023.09.16
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
林cancan叫jiji2023.09.16
太厉害了,我家猴子看完都会上天了
地下铁2023.09.16
5555~~~~
AEK2023.09.16
太有实力了好吧
CHICKEN2023.09.16
给个三连
张靖钰2023.09.16
汕头市蓝天学校初二10班辛嵘嘉实名为这位温良老师点赞
佘挺2023.09.16
666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666牛牛牛牛牛
AEK2023.09.16
点赞加关注
CHICKEN2023.09.16
666赞赞赞厉害厉害离谱离谱牛逼牛逼
81rum19wCJjs2023.09.16
6666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
林cancan叫jiji2023.09.16
点赞,关注,加好友,直接关注
花生编程2023.08.13
赞赞赞赞赞
花生编程2023.08.13
厉害厉害
三春牛-创客2023.08.10
厉害厉害
三春牛-创客2023.08.10
厉害厉害
hacker_2023.07.18
666
腿毛利小五郎2023.06.30
666
宋云辉2023.06.27
s
宋云辉2023.06.27
👄