用树莓派RP2040实现鼠标功能和lcd画板
本项目是基于树莓派RP2040设计的一款鼠标和lcd画板,可以正常驱动电脑鼠标,以及可以在lcd屏幕上画画,写字等。
标签
嵌入式系统
MicroPython
2022寒假在家练
树莓派RP2040
模拟鼠标
DH蜡笔
更新2022-03-02
金陵科技学院
1142

RP2040项目总结报告

一、项目介绍

本项目是基于树莓派RP2040设计的一款鼠标和lcd画板,可以正常驱动电脑鼠标,以及可以在lcd屏幕上画画,写字等。

二、设计思路

Fse30f-QN8bi4xlgB5BywkmMMSLR

图 1设计流程图

三、硬件介绍

(1)采用树莓派Pico核心芯片RP2040:

双核Arm Cortex M+内核,可以运行到133MHz。

264KB内存。

性能强大、高度灵活的可编程IO可用于高速数字接口。

片内温度传感器、并支持外部4路模拟信号输入,内部ADC采样率高达500Ksps、12位精度。

支持MicroPython、C、C++编程。

(2)板上功能:

240*240分辨率的彩色IPS LCD,SPI接口,控制器为ST7789。

四向摇杆 + 2个轻触按键 + 一个三轴姿态传感器MMA7660用做输入控制

板上外扩2MB Flash,预刷MicroPython的UF2固件。

一个红外接收管 + 一个红外发射管。

一个三轴姿态传感器MMA7660。

一个蜂鸣器。

双排16Pin连接器,有SPI、I2C以及2路模拟信号输入。

可以使用MicroPython、C、C++编程。

USB Type C连接器用于供电、程序下载。

FpOIcLOTHF0c3wosPhoOf3FB3Wkg

图 2 RP2040实物图

四、实现功能

  • 作为鼠标接入电脑(具体操作详见视频)

FnEFxJv6GjYJL23Qq-QhAR2Rc72c

图 3 鼠功能示意图

  • 作为lcd画板

FuEW0lmngazT4pvUzdc_0uVDq-7Z

图 4开机界面

FhU2ACjKwmM93xcCa9XaslwRJ2dn

图 5 lcd画板

五、主要代码

import uos

import machine

import st7789 as st7789

from fonts import vga2_8x8 as font1

from fonts import vga1_16x32 as font2

import random

import framebuf

from machine import Pin

import time

import hid

import usb_hid




move_left=-4

move_right=4

move_up=-4

move_down=4

stop = 0




control = machine.ADC(28)   //选取通道

contro2 = machine.ADC(29)   //选取通道




my=hid.Mouse()   //实例化




h_value=1

w_value=1




high=110

wegiht=110




PB = Pin(5, Pin.IN, Pin.PULL_UP)//选取通道

PA = Pin(6, Pin.IN, Pin.PULL_UP)//选取通道

sta = Pin(7, Pin.IN, Pin.PULL_UP)//选取通道



    

while True:

    adc = contro2.read_u16()

    x_value = int(adc * (6553-3276)/0xffff) + 3276  //读取adc值

    time.sleep(0.001)

    

    adc = control.read_u16()

    y_value = int(adc * (6553-3276)/0xffff) + 3276  //读取adc值

    time.sleep(0.001)

my.__init__

//阈值判断




    if(x_value<4900):

        high=high-h_value

        high=int (high)

        my.move(move_left,stop)

    if(x_value>5000):

        high=high+h_value

        high=int (high)

        my.move(move_right,stop)

    if(y_value<4800):

        wegiht=wegiht-w_value

        wegiht= int (wegiht)

        my.move(stop,move_up)

    if(y_value>4950):

        wegiht=wegiht+w_value

        wegiht= int (wegiht)

        my.move(stop,move_down)

//画线




    display.fill_rect(high,wegiht,5,5,st7789.BLACK)

    

    if (PA.value()==0):

        my.press(6)

        while (PA.value()==0):

             time.sleep(0.5)

             my._send_no_move()

        my.release(6)

    

       

    if (PB.value()==0):

        my.press(5)

        while (PA.value()==0):

             time.sleep(0.5)

             my._send_no_move()

        my.release(5)

   //清屏     

    if (sta.value()==0):       

        display.fill(st7789.WHITE)

设置引脚进行模拟量采集,实现遥感对鼠标的控制,通过读取的模拟量值来判断不同的状态方向,引用usb_hid的库,实现鼠标的模拟。根据阈值判断和移动距离的设置,对鼠标进行操作。使能按键的引脚,调用usb_hid库对按键的操作进行处理,从而实现鼠标的操作。

st7789_res = 0

st7789_dc  = 1

disp_width = 240

disp_height = 240

CENTER_Y = int(disp_width/2)

CENTER_X = int(disp_height/2)

print(uos.uname())

spi_sck=machine.Pin(2)

spi_tx=machine.Pin(3)

spi0=machine.SPI(0,baudrate=4000000, phase=1, polarity=1, sck=spi_sck, mosi=spi_tx)

#

print(spi0)

display = st7789.ST7789(spi0, disp_width, disp_width,

                          reset=machine.Pin(st7789_res, machine.Pin.OUT),

                          dc=machine.Pin(st7789_dc, machine.Pin.OUT),

                          xstart=0, ystart=0, rotation=0)

display.fill(st7789.BLACK)

display.text(font2, "DRAWING", 40, 10)

display.text(font2, "READY?", 40, 50)

display.text(font2, "LET'S GO", 40, 120)

display.text(font2, "====>", 140, 180)

for i in range(2500):

    display.pixel(random.randint(0, disp_width),

          random.randint(0, disp_height),

          st7789.color565(random.getrandbits(8),random.getrandbits(8),random.getrandbits(8)))

使用显示屏的驱动,然后设置一个界面,使能reset的端口,通过代码实现清屏函数,lcd画板的原理和鼠标一样,使用adc模拟采取,遥感控制,不断刷新屏幕实现画板的功能。

六、未来建议以及反思

可以使用键盘的函数,遥感控制特殊键值,例如crtl+c,crtl+v,做一个简易的小键盘。遇到困难,micropython编译不熟,语句使用经常出错。还是很高兴能参加这次寒假一起学活动,板卡也是不错的。

 

附件下载
鼠标带画面.zip
团队介绍
团队成员
DH蜡笔
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号