4355| 12
|
[ 虚谷号入门] 虚谷号借助pinpong库使用纯Python代码控制硬件 |
本帖最后由 柳春晓 于 2021-7-15 11:48 编辑 虚谷号使用pinpong库教程首先我们先来介绍一下pinpong库是什么: pinpong库是一套控制开源硬件主控板的Pyhton库,基于Firmata协议并兼容MicroPython语法。 借助于pinpong库,直接用Python代码就能给各种常见的开源硬件编程。其原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通讯,执行各种命令。 pinpong库的名称由“pin”和“pong”组成,“pin”指引脚,“pinpong”为“乒乓球”的谐音,指信号的往复。 下面的内容将讲解如何在虚谷号上使用jupyter编辑器和pinpong库来控制厚物扩展板上的硬件。 文章将会从准备工作和项目制作两大部分讲述,准备工作内容有:准备器件、连接器件、配置WiFi、打开在线编辑器、安装pinpong库;项目制作内容有:LED闪烁、按键控制LED、OLED显示文字、RGB闪烁。 一、准备工作1.需要的器件:虚谷号创客版套件 * 1 (主要包含主板、天线、数据线、适配器,也可以选择教育版套件,性能更佳) 厚物扩展板 * 1 2.组装厚物扩展板和虚谷号虚谷号主控板上有两排排母,一排长一排短,厚物扩展板上有两排针脚,一排长一排短,将虚谷号的长短排母对应厚物扩展板的长短排针对到一起,然后轻轻按压即可成功组装。 3.配置WiFi首先我们需要一个路由器或者其他无线设备,让电脑和虚谷号能够连接同一个WiFi。配置WiFi是为了接下来能够使用jupyter在线代码编辑器,后面如果要做物联网设计也是需要配置WiFi的,因此这个设置是一定要的。 (1)将虚谷号和厚物板接起来后,通过USB数据线将虚谷号和电脑连接,连接成功后板子上的指示灯会点亮。(2)连接成功后等待一会系统会弹出一个U盘,进入后打开vvBoard文件夹,如果没有U盘弹出建议换一条好一点的数据线试一下。(3)进入后用记事本打开vvBoard_config文件。(4)修改WiFi帐号和密码信息。(5)按下板子右侧的复位键重启板子,等待U盘再次出现后再次打开vvBoard文件夹,然后打开wifi_log.txt文件可查看wifi连接状态以及分配的IP地址。如果wifi没有连接成功请检查wifi的帐号密码信息以及wifi信号是否正常,且wifi网络需要是直连网络,不能用那种连接后还需要网页登录的wifi。4. 打开juperter在线编辑器(1)如果wifi正确连接,打开vvBoard文件夹会出现访问jupyter和访问siot,双击访问jupyter。如果没有出现访问jupyter和访问siot,请确定虚谷号与电脑是否处在同一个wifi网络下,如果不确定是否处于同一网络,建议使用手机热点让电脑和虚谷号同时连接。(2)登录密码会有提示,进入jupyter后界面如图。(3)新建一个python3文件(4)进入后可看到上方有一些工具,常用主要是左侧运行和停止按钮,右侧会有连接状态提示信息(连接成功后为空白),python3的圆点全黑时表示正在运行。5.安装PinPong库(1)接下来在第一行空白的指令行输入指令安装pinpong库,注意叹号要是英文输入法,PinPong库只需安装一次即可一直使用,不用每次都安装哦(后面的版本号可能会有差异,下一步会更新版本):
(2)安装完成后将pinpong库升级为最新版本:
(3) 查看pinpong库是否成功安装并查看版本号,当前我使用的最新版本是0.3.0,如果低于这个版本下面的操作可能会出现错误:
(4)加载一下pinpong库看能否成功加载:
少数用户可能会发生以下情况 一直提示导入库错误,解决办法:断电重启设备再次尝试,如果依然报错库有问题,就将pinpong库卸载重装。 1)新建终端: 2)卸载: 3)察看确认是否卸载干净: 4)可以看到我这里还有其他版本的残留: 5)继续卸载: 6)察看确认是否卸载干净: 7)直到pip list 看不到pinpong库 二、项目制作1.使用PinPong库点亮厚物板上的LED灯,并实现闪烁效果:[mw_shl_code=python,false] #实验效果:控制板载LED灯一秒闪烁一次 #接线:将厚物板与虚谷号对接 import time #加载时间库,用来实现延时控制 from pinpong.board import Board,Pin #加载pinpong库 Board("xugu").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 #Board("uno","COM36").begin() #windows下指定端口初始化 #Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化 #Board("uno","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化 led = Pin(Pin.D13, Pin.OUT) #引脚初始化为电平输出 #循环执行 while True: #led.value(1) #输出高电平 方法1 led.write_digital(1) #输出高电平 方法2 print("1") #终端打印信息 time.sleep(1) #等待1秒 保持状态 #led.value(0) #输出低电平 方法1 led.write_digital(0) #输出低电平 方法2 print("0") #终端打印信息 time.sleep(1) #等待1秒 保持状态 [/mw_shl_code] (1)运行效果(2)代码分析
(3)停止代码运行因为上面blink的代码中用到了while Ture,因此程序会一直循环执行,这时如果想要执行其他的代码必须先让上面的代码块停止运行,点击左上方的停止按钮(中断服务)即可停止,等待右上角运行状态的圆点为白色即代表运行停止,并且会打印提示信息: 2.使用PinPong库和按键控制厚物板上的灯亮:[mw_shl_code=python,false]import time #实验效果:通过按键控制灯亮灭,按键按下灯亮,松开灯灭 #接线:将厚物板与虚谷号对接,按键连接到D8引脚 from pinpong.board import Board,Pin #导入必要的库函数 Board("xugu").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 #Board("uno","COM36").begin() #windows下指定端口初始化 #Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化 #Board("uno","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化 btn = Pin(Pin.D8, Pin.IN) #设置数字引脚8号的数字输入 led = Pin(Pin.D13, Pin.OUT) #设置数字引脚13号为数字输出 print("start..") while True: #v = btn.value() #读取引脚电平方法1 v = btn.read_digital() #读取引脚电平方法2 if(v == 1): #led.value(0) led.write_digital(0) #print("LED on") else: #led.value(1) led.write_digital(1) #print("LED off") [/mw_shl_code] (1)运行效果(2)代码分析
3.停止运行上面的程序,使用PinPong库控制厚物板上的OLED显示信息:[mw_shl_code=python,false] #实验效果:I2C OLED2864屏控制 #接线:将厚物板与虚谷号对接 import time from pinpong.board import Board from pinpong.libs.dfrobot_ssd1306 import SSD1306_I2C #导入ssd1306库 Board("xugu").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 #Board("uno","COM36").begin() #windows下指定端口初始化 #Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化 #Board("uno","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化 oled=SSD1306_I2C(128, 64) #初始化屏幕,传入屏幕像素点数 while True: oled.fill(1) #全部填充显示 oled.show() #显示生效 print("1") time.sleep(1) oled.fill(0) #全部填充熄灭,清屏 oled.show() #显示生效 print("0") time.sleep(1) oled.text(0) #显示数字 oled.text("Hello PinPong",8,8) #指定位置显示文字 oled.show() #显示生效 time.sleep(2) [/mw_shl_code] 运行效果4.停止运行上面的程序,使用PinPong库控制厚物板上的RGB灯闪烁不同颜色:[mw_shl_code=python,false]# -*- coding: UTF-8 -*- #实验效果:控制WS2812单线RGB LED灯 #接线:将厚物板与虚谷号对接 import time from pinpong.board import Board,Pin,NeoPixel #导入neopixel类 Board("uno").begin() #初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别 #Board("uno","COM36").begin() #windows下指定端口初始化 #Board("uno","/dev/ttyACM0").begin() #linux下指定端口初始化 #Board("uno","/dev/cu.usbmodem14101").begin() #mac下指定端口初始化 NEOPIXEL_PIN = Pin(Pin.D9) PIXELS_NUM = 3 #灯数 np = NeoPixel(NEOPIXEL_PIN,PIXELS_NUM) while True: np[0] = (0, 255 ,0) #设置第一个灯RGB亮度 np[1] = (255, 0, 0) #设置第二个灯RGB亮度 np[2] = (0, 0, 255) #设置第三个灯RGB亮度 print("color 1") time.sleep(1) np[0] = (0, 0, 0) np[1] = (0, 0, 0) np[2] = (0, 0, 0) print("color 2") time.sleep(1) [/mw_shl_code] 运行效果还有很多其他的示例,可以通过查看pinpong库的官方文档来学习:https://pinpong.gitee.io/ 或 https://pinpong.readthedocs.io |
本帖最后由 DFH1Zk7egRD 于 2021-1-5 13:55 编辑 按照您的步骤往下进行,import语句报错: from pinpong.board import Board,Pin 错误如下 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed