Day1 工具箱构建——开发环境的构建
目录
- Day1 工具箱构建——开发环境的构建
- 1.元件选型
- 2.准备工具
- 3. 开发板准备
- 焊接排针
- 具体步骤
- 注意事项与技巧
- 4. 软件环境配置与固件烧录
- Thonny IDE软件环境配置
- 配置Micropython环境与烧录固件
- **问题:**买的是4M/16M,但是烧录MicroPython固件后,可用仍然只有1.4
- 后记
- 示例实验
- External LED 实验
- Traffic Light System 实验
- Burglar Alarm LED Buzzer 实验
- Potentiometer 实验
- WS2812 实验
- LCD1602 I2C 实验
- Day0 创想启程——课程与项目预览
- Day1 工具箱构建——开发环境的构建
- Day2 探秘微控制器——单片机与MicroPython初步
- Day3 实战演练——桌面迷你番茄钟
- Day4 迈向高手之路——进一步学习!
1.元件选型
这个步骤一般在项目选题定好以后进行。实现一个项目,我们一般需要以下几类元件(括号内为本项目使用),我们需要视产品功能,元件生产厂商,元件的作用等方面选定。
- 主控芯片/主控板(RP2040)
- 自制PCB扩展板/成品扩展板(Pico-OLED-1.3 1.3英寸OLED扩展板)
- 其他元器件
- 电源等(锂电池)
2.准备工具
我们需要一些工具,来避免项目做到一半搁置去买东西等情况,所以提前准备一些必要的工具是非常必要的。
- 基本工具(剪刀、钳子等)
- 剪线钳:修剪多余的排针长度。
- 焊接工具
- 电烙铁:建议使用恒温电烙铁以控制温度。
- 焊锡膏:用于提高焊接质量。
- 焊锡丝:直径通常为0.5mm至1.2mm之间,选择合适的直径。
- 助焊剂(可选):如果焊锡膏粘性不足,可以考虑使用。
- 防静电手套或手腕带(可选):保护电子元件免受静电损害。
- 放大镜(可选):提高可视性和准确性。
- 其他耗材工具
- 面包板:用于固定排针。
- 排针:确保针脚干净无损。
- 电脑及配件
3. 开发板准备
焊接排针
我们买回来的开发板是默认不带排针的,所以我们需要自己焊接排针。
具体步骤
-
预处理:
1.1. 准备固定支点: 将排针插入面包板上,确保排针稳定且垂直于开发板。
1.2. 涂抹焊锡膏: 在排针的焊接面上轻轻涂抹一层薄薄的焊锡膏。
1.3. 加热电烙铁: 将电烙铁加热到适宜的温度,并清除烙铁头。
-
焊接:
2.1. 放置烙铁头: 将烙铁头轻触排针与PCB的接触点。
2.2. 加入焊锡丝: 当焊锡膏开始熔化时,将焊锡丝接触到烙铁头和排针的接触点。
2.3. 撤离焊锡丝: 当焊点形成良好的形状并且焊锡丝已经足够时,迅速移开焊锡丝。
2.4. 取走电烙铁: 在焊锡丝撤离后,立即移开电烙铁,避免过度加热。
2.5. 检查焊点: 确保每个焊点都完整且没有虚焊的情况。
注意事项与技巧
-
温度控制: 如果使用的不是恒温电烙铁,请不要让烙铁头长时间接触焊接面,以免损坏电子元器件。
-
避免过热: 在焊接多个点时,应适时停顿,避免连续长时间加热导致元器件受损。
-
安全第一: 确保工作环境通风良好,并采取适当的防护措施以保护眼睛和皮肤。
-
提高速度: 虽然速度很重要,但确保质量优先。
-
保持稳定: 在焊接过程中,保持手部稳定,避免抖动。
-
检查焊点: 确保每次焊接完成后,焊点表面光滑、饱满,没有气泡或裂纹。
4. 软件环境配置与固件烧录
Thonny IDE软件环境配置
为了方便在电脑上使用MicroPython开发RP2040-PLUS板,建议下载Thonny IDE
- 下载Thonny IDE并按照步骤安装
- Thonny IDE下载链接(Windows版本)
- Thonny 官网
- 安装完成之后,第一次要配置语言和主板环境,由于我们是为了使用Pico,所以注意主板环境选择Raspberry Pi选项
- 修改Thonny语言为简体中文,选择完成后重启生效
配置Micropython环境与烧录固件
-
使用USB-C数据线连接RP2040-PLUS与Windows电脑
-
烧录固件
- 下载固件库到电脑上
**问题:**买的是4M/16M,但是烧录MicroPython固件后,可用仍然只有1.4
官方固件没有更新,仍然是以2M内存编写的固件;使用下面对应的固件即可:
4M:4M MicroPython固件
16M:16M MicroPython固件- 在Windows下载固件库(下面两种方法都可以,都可以试试)
- 按住BOOT键后连接电脑后,松开BOOT键,电脑会出现一个可移动磁盘,将固件库复制进去即可
- 连接电脑后,同时按下BOOT键跟RESET键,先松开RESET键再松开B OOT键,电脑会出现一个可移动磁盘,将固件库复制进去即可
-
烧录完固件后,理论上Thonny将会识别到这个设备。点击右下角配置设备,选择RP2040。
-
认识Thonny,接下来你可以先打开编辑器,摸索一下,然后试着查看官方教程学习基本的使用方法。Thonny 官网
后记
好了,现在完事具备。你可以先试试完成以下这些RP2040的小实验,提前预习下啊~
示例实验
- 下载示例程序到电脑桌面即可进行一些几个有趣的实验。
External LED 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-5 External LED中的python文件,运行示例程序可以看到红灯有在闪烁的现象。
- 使用注意事项:LED较长的引脚为正极,较短的为负极,负极应该接GND,正极应该和GPIO输出口相连,使用时必须接上电阻。
- 代码解析
led_external = machine.Pin(15, machine.Pin.OUT) #设置GP15为输出模式 while True: led_external.toggle() #每过5秒钟让LED灯的状态改变一次utime.sleep(5)
Traffic Light System 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-9 Traffic-Light-System中的python文件,运行程序可以看到交通灯带正常的运行,当按下按键时会触发蜂鸣器。
- 使用注意事项:LED较长的引脚为正极,较短的为负极,负极应该接GND,正极应该和GPIO输出口相连,使用时必须接上电阻;蜂鸣器的红线接GPIO口输出,黑线接GND。
- 代码解析
def button_reader_thread(): #检测按键是否被按下global button_pressed while True:if button.value() == 1: button_pressed = True_thread.start_new_thread(button_reader_thread, ()) #用开启线程的方式去检测按键 while True:if button_pressed == True: #如果按键被按下,红灯亮起,蜂鸣器响闹led_red.value(1) for i in range(10): buzzer.value(1) utime.sleep(0.2) buzzer.value(0) utime.sleep(0.2) global button_pressed button_pressed = False led_red.value(1) #正常情况下红灯边绿灯时黄灯会亮两秒,然后黄灯和红灯灭,绿灯亮utime.sleep(5) #由绿灯边红灯时,绿灯先灭,黄色亮两秒,然后红灯亮led_amber.value(1) utime.sleep(2) led_red.value(0) led_amber.value(0) led_green.value(1) utime.sleep(5) led_green.value(0) led_amber.value(1) utime.sleep(5) led_amber.value(0)
Burglar Alarm LED Buzzer 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-14 Burglar Alarm LED Buzzer中的python文件,运行程序可以看到,当人为的在Passive infrared sensor前晃动时,LED灯闪亮的同时蜂鸣器也会报警。
- 使用注意事项:Passive infrared sensor 的中间引脚为数据输出引脚,两边的引脚分别接入VCC和GND即可。
- 代码解析
def pir_handler(pin): #中断处理函数,蜂鸣器响,led快速闪烁print("ALARM! Motion detected!") for i in range(50): led.toggle() buzzer.toggle() utime.sleep_ms(100) sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)#开启中断,当人体传感器检测到异常时就会今天中断处理函数处理 while True: #无异常状态下会每隔5秒改变一次LDE的状态led.toggle() utime.sleep(5)
Potentiometer 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-16 Potentiometer中的python文件,运行程序,旋转电位器可以看到Sheel窗口中打印出来的电压值也在改变。
- 使用注意事项:Potentiometer的中间引脚为数据输出口,两边的引脚分别接上GND和VCC即可。
- 代码解析
potentiometer = machine.ADC(26) #将GP26作为模拟信号采集引脚 conversion_factor = 3.3 / (65535) while True:voltage = potentiometer.read_u16() * conversion_factor #将采集到的数据进行格式化转换成电压值print(voltage) #打印电压信息,电压值会随着滑动变阻器旋转而变化utime.sleep(2)
WS2812 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-25 WS2812中的WS2812_RGB_LED.py文件,运行程序可以一次看到蓝、红、绿、白的RGB颜色。
- 代码解析
#这一段代码使用到的是状态机机制,如下代码是一个装饰器,在装饰器中我们可以硬件进行初始化、设定引脚的电平等等。 #label("bitloop") 我们可以在代码中定义一下标记,方便我们通过跳转的方式跳到他们这里执行。 #jmp(not_x,"do_zero") 当x=0时,我们就调整到标签“do_zero”。 #nop() .set(0) [T2 - 1] 当x=0时,会跳转到这里执行。 @asm_pio(sideset_init=PIO.OUT_LOW, out_shiftdir=PIO.SHIFT_LEFT, autopull=True, pull_thresh=24) def ws2812():T1 = 2T2 = 5T3 = 1label("bitloop")out(x, 1) .side(0) [T3 - 1] jmp(not_x, "do_zero") .side(1) [T1 - 1] jmp("bitloop") .side(1) [T2 - 1] label("do_zero")nop() .side(0) [T2 - 1] # Create the StateMachine with the ws2812 program, outputting on Pin(22). sm = StateMachine(0, ws2812, freq=8000000, sideset_base=Pin(0)) #创建状态机 # Start the StateMachine, it will wait for data on its FIFO. sm.active(1) #开始状态机 # Display a pattern on the LEDs via an array of LED RGB values. ar = array.array("I", [0 for _ in range(NUM_LEDS)]) print(ar) print("blue") for j in range(0, 255): for i in range(NUM_LEDS): ar[i] = j sm.put(ar,8) #put()的方法是将数据放入状态机的输出FIFOtime.sleep_ms(5)
LCD1602 I2C 实验
- 按照下图连接好硬件,连接好接入电脑的Micro USB,在Thonny打开示例程序Lesson-21 LCD1602 I2C中的python文件,先将RGB1602.py文件另存为Raspberry Pi Pico中,运行Choose_Color.py可以看到每5秒切换一种不同的颜色;运行Discoloration.py文件可以看到RGB颜色渐变的效果。
- 代码解析
Choose_Color.py
#定义颜色 rgb9 = (0,255,0) #青色’ lcd.setCursor(0, 0) #设置游标位置 # print the number of seconds since reset: lcd.printout("Waveshare") #写入字符 lcd.setCursor(0, 1) #设置游标位置到第二行第零列 lcd.printout("Hello,World!")#写入字符 lcd.setRGB(rgb1[0],rgb1[1],rgb1[2]); #设置背光
Discoloration.py
t=0 while True:r = int((abs(math.sin(3.14*t/180)))*255); #RGB随着时间的变化而变化g = int((abs(math.sin(3.14*(t+60)/180)))*255);b = int((abs(math.sin(3.14*(t+120)/180)))*255);t = t + 3;lcd.setRGB(r,g,b);#重新设置RGB的值 # set the cursor to column 0, line 1lcd.setCursor(0, 0) #定位到第一行第零列 # print the number of seconds since reset:lcd.printout("Waveshare")#写入字符lcd.setCursor(0, 1) #定位到第二行第零列lcd.printout("Hello,World!")#写入字符time.sleep(0.3)