【硬件控制】5. Pico使用串口与电脑通信

这篇具有很好参考价值的文章主要介绍了【硬件控制】5. Pico使用串口与电脑通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前几节都是在讲树莓派与外部的元件通信,本节来讲树莓派如何与电脑通信

树莓派pico串口通信,单片机,电脑,stm32

本篇文章会教大家开发一个这样的上位机软件,用来和Pico通信,文章较长,耐心看完

先看一下树莓派Pico的引脚图吧

树莓派pico串口通信,单片机,电脑,stm32

我们可以看到上面有UART的引脚,UART又分为TX和RX

UART是串口的一种,可以用来通信,包括单片机和电脑,单片机和单片机,单片机和其它带串口的外设

UART是全双工的,也就是说发送的发送的同时可以接收数据,UART需要三根线,一根TX(发送),一根RX(接收)和一根GND(共地)


串口模块:

现在的电脑都不带串口了,我们需要一个USB转串口模块来给电脑增加串口能力

如图所示:

网上很容易买到这样的USB转串口模块,只需几块钱,用的是CH340芯片

树莓派pico串口通信,单片机,电脑,stm32

这个模块一头插电脑,另一头的引脚可以通过杜邦线连接Pico或其它单片机,这些引脚上面都要标注,别插错就可以了

买到模块后找店家要一个驱动,安装驱动后,可以测试下模块是否正常工作,将模块插入电脑,设备管理器里面出现新的串口设备说明驱动安装成功

然后使用一根杜邦线将TXD脚和RXD脚连接起来,这样这个模块发送的数据就会被自己接收到了

连接完成后,打开串口调试助手

里面选择自己的串口号,点击打开,同时将接收区设置中的十六进制显示去掉

树莓派pico串口通信,单片机,电脑,stm32

在下面的输入窗口中输入数据,点击发送,上面的接收窗口就能收到相同的数据了,说明串口模块工作正常


Pico连接串口:

1号脚是串口的TX

2号脚是串口的RX

3号脚是GND,也要用到

这三个脚接到USB转串口模块的对应引脚上

TX接RX,RX接TX,GND接模块的GND(需要共地才能通信)

连接完成后给Pico编写串口通信代码:


import time

from machine import UART, Pin

led = Pin(25, Pin.OUT)
uart = UART(0, baudrate=9600, bits=8, stop=1)

while True:
    led.toggle()
    time.sleep(1)
    uart.write('hello-world\n')

首先引入UART包,然后初始化一个uart对象

uart需要设置几个参数

第一个是串口号,设置为0代表用Pico上的第一个串口

baudrate设置串口通信的波特率

bits设置通信的数据位为8位

stop设置停止位为1位

代码写完上传到Pico中

然后打开串口助手工具

树莓派pico串口通信,单片机,电脑,stm32

串口设置要和Pico中的配置保持一致,比如波特率写9600,两边都要写9600

然后打开串口,就能源源不断收到Pico发送的数据了

然后我们来通过Python写一个小工具,用来代替串口调试助手 读取串口数据

Python提供了一个串口操作的包,pyserial

需要先安装这个包

pip install pyserial

然后编写代码,操作串口


import serial

com = serial.Serial("COM4", 9600)
if com.isOpen():
    print("打开串口成功")
    print(com.name)

    try:
        while True:
            read_data = com.read()
            if read_data:
                print(read_data)
    except:
        print('err')
    finally:
        com.close()
else:
    print("打开串口失败")

代码写完后,将串口调试助手的串口操作关闭掉,运行上面的Python脚本,也能源源不断输出Pico发送的数据了


上位机程序:

最后来编写一个上位机程序控制Pico

上位机是一个运行在电脑或手机上的程序,可以操作单片机

我们编写一个Python界面程序来给Pico发送指令,Pico收到指令后执行开灯或者关灯操作

使用PySimpleGui来编写界面

需要先安装包

pip install PySimpleGUI

然后编写如下代码:


import PySimpleGUI as sg
import serial
from serial.rfc2217 import Serial
from serial.tools import list_ports


def get_com_list():
    """
    获取串口列表
    :return: 
    """
    ports = list_ports.comports(include_links=False)
    return [port.device for port in ports]


def get_baudrates_list():
    """
    获取波特率列表
    :return: 
    """
    return [item for item in Serial.BAUDRATES]


if __name__ == '__main__':
    com_list = get_com_list()
    baudrates_list = get_baudrates_list()
    com: serial.Serial = None

    layout = [[sg.Text('通过按钮控制Pico点亮/熄灭LED')],
              [sg.HorizontalSeparator()],
              [sg.Text('串口:'), sg.InputCombo(com_list, readonly=True, key='com'),
               sg.Button('刷新', key='refresh_com_list')],
              [sg.Text('波特率:'), sg.InputCombo(baudrates_list, readonly=True, default_value=115200, key='baudrates')],
              [sg.Button('打开串口', key='open_serial'), sg.Button('关闭串口', key='close_serial')],
              [sg.HorizontalSeparator()],
              [sg.Button('开灯', key='open_led'), sg.Button('关灯', key='close_led')]]

    window = sg.Window('Pico上位机程序v1.0', layout, size=(300, 200))

    while True:
        event, values = window.read()
        if event == sg.WIN_CLOSED:
            break
        elif event == 'refresh_com_list':
            # 刷新串口列表
            com_list = get_com_list()
            window['com'].update(values=com_list)
        elif event == 'open_serial':
            # 打开串口
            selected_com = values['com']
            selected_baudrates = values['baudrates']
            if not selected_com:
                sg.Popup('请选择串口')
            elif not selected_baudrates:
                sg.Popup('请选择波特率')
            else:
                if not com:
                    print(f'open serial: {selected_com}')
                    com = serial.Serial(selected_com, int(selected_baudrates))
        elif event == 'close_serial':
            # 关闭串口
            if com and com.isOpen():
                print('close serial')
                com.close()
                com = None
        elif event == 'open_led':
            if com and com.isOpen():
                print('send open led command')
                com.write(b'open_led\n')
        elif event == 'close_led':
            if com and com.isOpen():
                print('send close led command')
                com.write(b'close_led\n')

    window.close()

上面这段代码会创建这样的窗口:

树莓派pico串口通信,单片机,电脑,stm32

可以下拉选择串口,然后设置波特率,打开串口后就能发送指令了

这里定义了两个指令

开灯:

open_led\n

关灯:

close_led\n

这两个指令会通过串口发送到Pico设备,Pico收到后判断指令然后执行相应的动作

Pico的代码如下:


import time

from machine import UART, Pin

led = Pin(25, Pin.OUT)
uart = UART(0, baudrate=115200, bits=8, parity=None, stop=1)

uart.write('pico started!\n')

while True:
    time.sleep(1)

    if uart.any():
        command = uart.readline()
        if not command:
            continue

        command_str = command.decode()

        uart.write('recv-{}\n'.format(command_str))

        if command_str.startswith('open_led'):
            led.value(1)
        elif command_str.startswith('close_led'):
            led.value(0)

循环接收串口消息,收到后判断是否为定义的指令

然后执行相应的动作

以上就是一个简单的单片机与上位机通信的案例,大家可以稍加改造完成自己的控制功能文章来源地址https://www.toymoban.com/news/detail-599425.html

到了这里,关于【硬件控制】5. Pico使用串口与电脑通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践

    树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C++和MicroPython编程。本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroPython编程示例,包括树莓派Pico W开发板板载LED使用及控制编程示例,Pico W开发板用作WiFi无线HTTP网络服务器的MicroPython编

    2023年04月12日
    浏览(47)
  • RPI pico(树莓派 pico RP2040微控制器) 教程1:刷固件

       树莓派pico搭载了两个ARM Cortex-M0+内核最高频率133MHz、 264KB的内部RAM、DMA控制器,支持挂最高达16MB的片外Flash。它有30个GPIO,4个可以作为模拟输入。外设包含2个UART、2个SPI、2个I2C、16个PWM通道以及一个USB1.1控制器。树莓派pico支持c/c++和 python两种编程方式, 我们这里使用p

    2024年02月13日
    浏览(82)
  • 树莓派pico做鼠标与键盘

    参考 键盘检测网站 学习网站(重要) 学习网站 寻求帮助---------- help(func) 查看支持的按键----- import board dir(board) 法一为发送指定数据(终端函数调用) 最终成品为按键发送,GP19与GP20分别接按键,按下后分别打印出a,b(可自定义) 鼠标为按键控制(也可终端控制),按下按键

    2024年02月10日
    浏览(42)
  • 如何用树莓派Pico针对IoT编程?

    目录 一、Raspberry Pi Pico 系列和功能 二、Raspberry Pi Pico 的替代方案 三、对 Raspberry Pi Pico 进行编程 硬件 软件 第 1 步:连接计算机 第 2 步:在 Pico 上安装 MicroPython 第 3 步:为 Thonny 设置解释器 第 4 步:编写程序 第5步:运行程序 四、小结 众所周知,Raspberry Pi(树莓

    2024年02月12日
    浏览(49)
  • 【39元linux开发板-ADB远程教程】-[ADB远程终端]-幸狐Luckfox Pico-超越树莓派PICO

    【教程-持续更新】 幸狐Luckfox Pico RV1103 教程合集 【39元linux开发板-ADB远程教程】-[ADB远程终端]-幸狐Luckfox Pico-超越树莓派PIC

    2024年02月10日
    浏览(45)
  • 编译Micropython固件For树莓派Raspberry Pi Pico

    1. 前言 由于想把自己编写的py文件打包的固件中,所以记录下如何编译micropython固件和打包。 2. 编译 最简单的方式就是在你的树莓派上进行,我用的是RP Pi2 下载所需文件: 更新子模块 更新编译工具 准备编译 编译最终文件存放在 3. 打包py文件 将需要打包的py文件放在 然后在

    2024年02月10日
    浏览(44)
  • 通过Linux串口实现树莓派与电脑通信

    目录 一  串口说明 二  USB—TTL模块 ● usb-ttl模块接口  三  串口通信常用的API 四  修改串口的配置文件  五  串口通信代码验证 ● 发送一个字符/字符串到串口 ● 树莓读取串口数据(字符) ● 代码拓展(双方) 我在基于全志H6实现Linux串口通信这篇文章中也有详解介绍:

    2024年02月08日
    浏览(54)
  • 使用树莓派Pico、DHT11和SSD1306搭建一个温度湿度计(只使用官方库,以及官方案例代码的错误之处和解决方案)

    最近想树莓派 Pico、DHT11 温湿度传感器和 SSD1306 OLED 屏幕做一个温度湿度计,树莓派官方案例也分别有这两个设备的案例,我就想做个简单的温度湿度计作为学习微控制器的开始,结果遇到了一个大坑,所以写本文记录一下整个过程。 本文最后会实现一个能在 SSD1306 OLED 屏幕上

    2024年02月11日
    浏览(42)
  • 使用U3D、pico开发VR(二)——添加手柄摇杆控制移动

    1System: 2Move Speed:注意速度过小会导致看起来没有移动 3RightHandMoveAction(right loco move):个人采用右手柄实现移动 1System: 2Turn Speed:注意旋转速度过小会导致看起来没有移动 3RightHandMoveAction:个人采用右手柄实现旋转 至此,初步的移动功能就实现了

    2024年02月08日
    浏览(67)
  • 基于Linux的树莓派和电脑之间的串口通信编程

    目录 1、串口基本认知 2、USB转TTL,使用ch340通信 2.1 TTL电平 2.2 串口接线方式 ​3、串口通信常用的API 4、代码通信实例 4.1 发送一个字符/字符串到串口 4.2 树莓读取串口数据(字符串) 4.3 双方互相通信 4.3.1 树莓派接收一个字符同时再发送字符到串口 4.3.2 树莓派子进程接收

    2024年02月03日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包