1. 入门使用

1.1. 硬件概述

开元主控

  • 供电方式:USB TypeC(DC: 5V)

  • 处理器: 树莓派 RP2040,双核 ARM Cortex-M0,主频:133MHz;

  • 外设:1xUSB;2xUART;2xSPI;3channel ADC;2xI2C;8个可编程IO状态机,可实现自定义UART,PWM等。

  • 存储:Flash:4MiB; SRAM:264kB;

  • 显示屏:2.4英寸,分辨率320*240,IPS全视角液晶显示屏

../../_images/主控2.png

主控由两部分组成,通过排线连接,采用M2铜柱固定。

../../_images/主控简介.png
主控结构简介:
    1. 两个用户按键

    1. 8个Grove标准接口(HY2.0-4P)

    1. 板连接器

    1. 树莓派 RP2040

    1. 用户LED

    1. USB TypeC 接口

    1. Flash 编程按键

    1. 液晶显示屏

    1. 无源蜂鸣器


1.2. 引脚连接

板载模块

描述

引脚

蜂鸣器

15

按键1

20

按键2

21

用户LED

25

Note

蜂鸣器为无源蜂鸣器;板载按键按下接地;用户LED高电平亮

拓展接口

主控拓展接口通过连接线与外部模块连接,接口为:HY2.0-4P,套件附带的连接线线序说明如下:

../../_images/连接线.png

主控拓展接口连接说明

描述

黑色线(地)

红色线(电源)

白色线(信号2)

黄色线(信号1)

端口1

GND

VCC(5V)

16/UART0_TX

17/UART0_RX

端口2

GND

VCC(5V)

18

19

端口3

GND

VCC(5V)

26/ADC0

27/ADC1

端口4

GND

VCC(5V)

22

28/ADC2

端口5

GND

VCC(5V)

0

1

端口6

GND

VCC(5V)

2

3

端口7

GND

VCC(5V)

4/UART1_TX

5/UART1_RX

端口8

GND

VCC(5V)

6

7

通过程序查询端口引脚连接

'''
 导入 get_port_pin 方法
'''
from openaie import get_port_pin #

'''
 查看端口引脚
 @ports: 端口号 1~8
 @signal: 信号线 1或2

 Example:
    # 查看端口1,信号1(黄色信号线 )引脚
    print(get_port_pin(1, 1))
'''
get_port_pin(ports, signal)

1.3. 软件安装

点击 Thonny 下载IDE,根据提示安装即可。IDE安装成功后,打开软件,如下图所示:

../../_images/IDE简介1.png

驱动安装

一般情况系统会自动安装驱动,若没有找到端口请查看 链接

1.4. 运行测试

通过TypeC数据线连接开发板到电脑,打开软件,如下图所示:

点击连接设备

../../_images/IDE连接设备1.png

如果是首次运行,先新建文件

../../_images/新建文件1.png

点击运行,在弹出的提示框中选择 Raspberry Pi Pico

../../_images/运行保存文件1.png

输入文件名 demo.py,点击确认

../../_images/输入保存文件1.png

输入或复制示例程序到程序编辑框内,点击“运行”,观察。

../../_images/运行程序1.png

Example: 拓展模块综合测试

'''
 开元套件测试案例
 硬件连接:
    可编程全彩LED       -- 端口1
    按键组              -- 端口2
    电位器              -- 端口3
    舵机                -- 端口4
    温湿度传感器        -- 端口5
    光照强度传感器      -- 端口6
    电机风扇            -- 端口7
    超声波测距传感器    -- 端口8

 实验现象:
     可编程全彩LED模块 3个LED 红蓝绿色跳变
     显示屏显示温湿度,光照强度,电位器值,超声波测量结果,按键状态
     电位器控制舵机和风扇转动(顺时针)
'''
import time, lcd
from openaie import *
from machine import Timer

rgb = rgb_led(1)             # 可编程全彩LED     -- 端口1
bt2 = button_group(2)        # 按键组            -- 端口2
p = potentiometer(3)         # 电位器            -- 端口3
s = servo(4)                 # 舵机              -- 端口4
th = th_sensor(5)            # 温湿度传感器      -- 端口5
light = light_sensor(6)      # 光照强度传感器    -- 端口6
m = motor_fan(7)             # 电机风扇          -- 端口7
us_sensor = ultrasonic(8)    # 超声波测距传感器  -- 端口8

lcd.rotation(0)
lcd.clear(color=0)

c = 0
def rgb_display(a):
    global c
    if c == 0:
        for i in range(3):
            rgb.set(i, (20, 0, 0))
    elif c == 1:
        for i in range(3):
            rgb.set(i, (0, 20, 0))
    elif c == 2:
        for i in range(3):
            rgb.set(i, (0, 0, 20))
    rgb.display()
    c += 1
    if c == 3:
        c = 0

# 创建并开启500ms周期定时器
tim = Timer()
tim.init(period=500, mode=Timer.PERIODIC, callback=rgb_display)

time_sensor_update = time.ticks_add(time.ticks_ms(), 500)
read_flag = False
while True:
    if time.ticks_diff(time.ticks_ms(), time_sensor_update): # 500ms间隔
        if read_flag:
            read_flag = False
            time_sensor_update = time.ticks_add(time.ticks_ms(), 500)
            try :
                th_info = "温度: %.1fC  湿度: %d%%"%(th.read_temperature(), th.read_humidity())
                light_info = "光照强度: %dlux"%light.read()
                dis_info = "距离: %dcm"%us_sensor.read()
                lcd.clear(color=0)
                lcd.draw_string(10, 16, th_info, fc=(0,0,255), bc=(0,0,0))
                lcd.draw_string(10, 38, light_info, fc=(0,0,255), bc=(0,0,0))
                lcd.draw_string(10, 60, dis_info, fc=(0,0,255), bc=(0,0,0))
            except:
                pass
        else:
            read_flag = True
            try :
                us_sensor.measure()
            except:
                pass

    val = p.read()
    m.set(val)
    s.write(math_map(val, 0, 100, 0, 180))

    if bt2.is_press(1):
        lcd.draw_string(10, 110, "按键1 按下", fc=(255,0,0), bc=(0,0,0))
    else :
        lcd.draw_string(10, 110, "按键1 释放", fc=(0,255,0), bc=(0,0,0))
    if bt2.is_press(2):
        lcd.draw_string(110, 110, "按键2 按下", fc=(255,0,0), bc=(0,0,0))
    else :
        lcd.draw_string(110, 110, "按键2 释放", fc=(0,255,0), bc=(0,0,0))


    lcd.draw_string(10, 82, "电位器值: %d "%val, fc=(0,0,255), bc=(0,0,0))
    lcd.display()
    time.sleep_ms(50)

1.5. 固件烧录

系统固件存放在Falsh内存中,按住 Flash 按键,再连接 USB,主控上电后释放按键,可以看到系统出现“RPI-RP2(H:)”盘符。 进入 链接 (提取码:rcx6) 下载所需版本固件(“firmware.uf2”文件),将固件复制进去即可完成固件烧录。

../../_images/固件升级盘.png

一般情况主控开机会显示当前固件版本,没有显示时可通过运行程序,查看主控当前运行的固件版本:

import openaie

print("version:", openaie.__version__)

Note

由于文档、固件持续更新,为保证使用体验的一致性,在测试案例前,请先升级固件到最新版本。

1.6. 开机运行

通过 Thonny IDE 运行的程序,要开机运行需要将程序保存到“main.py”中。

Note

一般测试保存文件名不要为“main.py”。当“main.py”程序有无限循环时可能出现无法连接的情况,解决方法请查看“异常处理”章节。

1.7. 异常处理

1. 设备忙

../../_images/设备忙.png

解决方法:点击“停止/重启后端进程”,等待片刻;或者先点击“选择设备”,后点击“停止/重启后端进程”。

../../_images/异常处理.png

2. 端口无法连接

解决方法:重新插拔USB

../../_images/无法连接.png

3. 找不到端口

解决方法:断开USB,按住板载按键1,再连接USB,上电后释放按键。

4. 未知错误

解决方法:烧录资料链接固件中的“nuke.uf2”文件擦除整个Falsh后,再烧录新固件。