单片机按键控制一个led灯亮灭的程序_01【pingpong库控制硬件】之虚谷号1

点击上方“蘑菇云创造”可以关注我们哦

首先我们先来介绍一下pinpong库是什么:

pinpong库是一套控制开源硬件主控板的Pyhton库,基于Firmata协议并兼容MicroPython语法。

借助于pinpong库,直接用Python代码就能给各种常见的开源硬件编程。其原理是给开源硬件烧录一个特定的固件,使开源硬件可以通过串口与电脑通讯,执行各种命令。

pinpong库的名称由“pin”和“pong”组成,“pin”指引脚,“pinpong”为“乒乓球”的谐音,指信号的往复。

下面的内容将讲解如何在虚谷号上使用jupyter编辑器和pinpong库来控制厚物扩展板上的硬件。

文章将会从准备工作和项目制作两大部分讲述,准备工作内容有:准备器件、连接器件、配置WiFi、打开在线编辑器、安装pinpong库;项目制作内容有:LED闪烁、按键控制LED、OLED显示文字、RGB闪烁。

一、准备工作

1.需要的器件:

虚谷号创客版套件  * 1  (主要包含主板、天线、数据线、适配器,也可以选择教育版套件,性能更佳)

厚物扩展板  * 1  

fbb5124a088fc8721a8ea4ce9c3b4459.png

2.组装厚物扩展板和虚谷号

虚谷号主控板上有两排排母,一排长一排短,厚物扩展板上有两排针脚,一排长一排短,将虚谷号的长短排母对应厚物扩展板的长短排针对到一起,然后轻轻按压即可成功组装。

7d6e801e45b95dc5fd88b899240e8134.gif

3.配置WiFi

首先我们需要一个路由器或者其他无线设备,让电脑和虚谷号能够连接同一个WiFi。配置WiFi是为了接下来能够使用jupyter在线代码编辑器,后面如果要做物联网设计也是需要配置WiFi的,因此这个设置是一定要的。

(1)将虚谷号和厚物板接起来后,通过USB数据线将虚谷号和电脑连接,连接成功后板子上的指示灯会点亮。

93b3cf8d73a8ec933500844667a2af9b.png

(2)连接成功后等待一会系统会弹出一个U盘,进入后打开vvBoard文件夹,如果没有U盘弹出建议换一条好一点的数据线试一下。

f7fa33099231331e963c10c2a7728882.png

(3)进入后用记事本打开vvBoard_config文件。

f7fa33099231331e963c10c2a7728882.png

(4)修改WiFi帐号和密码信息。

3d0f1115923ba204431429ebb39e0366.png

(5)按下板子右侧的复位键重启板子,等待U盘再次出现后再次打开vvBoard文件夹,然后打开wifi_log.txt文件可查看wifi连接状态以及分配的IP地址。如果wifi没有连接成功请检查wifi的帐号密码信息以及wifi信号是否正常,且wifi网络需要是直连网络,不能用那种连接后还需要网页登录的wifi。

ca47ed5a5d6664590e333929aeb99735.png

4. 打开juperter在线编辑器

(1)如果wifi正确连接,打开vvBoard文件夹会出现访问jupyter和访问siot,双击访问jupyter。如果没有出现访问jupyter和访问siot,请确定虚谷号与电脑是否处在同一个wifi网络下,如果不确定是否处于同一网络,建议使用手机热点让电脑和虚谷号同时连接。

415f7c33f1411eb95fd150beccb4dd7d.png

(2)登录密码会有提示,进入jupyter后界面如图。

6a250a1ecabebcf1109a1c9cd812937d.png

(3)新建一个python3文件

45ae2d97cb2e239570a3295fb3e969da.png

(4)进入后可看到上方有一些工具,常用主要是左侧运行和停止按钮,右侧会有连接状态提示信息(连接成功后为空白),python3的圆点全黑时表示正在运行。

fed5a2737c71c66cbc4f07bd0f3acfff.png

5.安装PinPong库

(1)接下来在第一行空白的指令行输入指令安装pinpong库,注意叹号要是英文输入法,PinPong库只需安装一次即可一直使用,不用每次都安装哦(后面的版本号可能会有差异,下一步会更新版本):

!pip install pinpong

e43ae2f3072427ff2375d28ec50c009d.png

(2)安装完成后将pinpong库升级为最新版本:

!pip install -U pinpong -i  https://pypi.Python.org/simple/

3aeec9471f4ffbb72c5f43629eabe339.png

(3) 查看pinpong库是否成功安装并查看版本号,当前我使用的最新版本是0.3.0,如果低于这个版本下面的操作可能会出现错误:

!pip list

13bcbaf79cba36b1ebc7fff286eb51d5.png

(4)加载一下pinpong库看能否成功加载:

from pinpong.board import Board,Pin #加载pinpong库  

输入这条指令运行,如果没有报错提示则说明安装成功。

少数用户可能会发生以下情况

一直提示导入库错误,解决办法:断电重启设备再次尝试,如果依然报错库有问题,就将pinpong库卸载重装。

1)新建终端:

bcbf63ccb0d8c6806d73e7656faa41e3.png

2)卸载:pip uninstall pinpong

3)察看确认是否卸载干净:pip list

4)可以看到我这里还有其他版本的残留:

9f7c2f3cb5877c43d0ae4b4dca0877bb.png

5)继续卸载:pip uninstall pinpong

6)察看确认是否卸载干净:pip list

7)直到pip list 看不到pinpong库

二、项目制作

1.使用PinPong库点亮厚物板上的LED灯,并实现闪烁效果:

#实验效果:控制板载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秒 保持状态

(1)运行效果

5b52a2609ef8e98f713e0ba23b6ce842.png 7536456f57c8d31d57c9a2593391066d.gif

(2)代码分析

led = Pin(Pin.D13, Pin.OUT)    这段代码定义了引脚D13为输出模式,Pin.D13定义了引脚为D13号引脚,也就是板载的LED灯,如果想外接LED只需要将D13改为其他引脚即可。

led.value(1)和led.write_digital(1)两种写法都是让D13引脚输出高电平,第一种写法更加简单,第二种写法更接近Arduino C的原写法,根据需要可自行更改。

time.sleep(1)是延时函数,参数的单位为S,如果想更改闪烁频率可修改参数“1”为其他的数。

(3)停止代码运行

因为上面blink的代码中用到了while Ture,因此程序会一直循环执行,这时如果想要执行其他的代码必须先让上面的代码块停止运行,点击左上方的停止按钮(中断服务)即可停止,等待右上角运行状态的圆点为白色即代表运行停止,并且会打印提示信息:

28304bf28cb89ad89ee535bfece6ee67.png

2.使用PinPong库和按键控制厚物板上的灯亮:

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")

(1)运行效果

b2cdcd392f66c5869a7cf519e6a2af1e.png e34d3b32a6267799fecfaf5f1f912e84.gif

(2)代码分析

btn = Pin(Pin.D8, Pin.IN)   这段代码定义了D8引脚为输入模式,Pin.D8代表引脚为D8引脚,如果要更换其他引脚需要修改这里。

v = btn.value() , v = btn.read_digital() 两种写法,读取按键的值存入变量v,然后判断v的值来控制灯的亮灭。

3.停止运行上面的程序,使用PinPong库控制厚物板上的OLED显示信息:

#实验效果: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)

运行效果

beea64e2ad9d043e99a535902bd1071c.png bd1924811beb4cfbe4befd36be0b1198.gif

4.停止运行上面的程序,使用PinPong库控制厚物板上的RGB灯闪烁不同颜色:

# -*- 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)

运行效果

297d5f6111c6fa1041c87e72a116d80d.gif

还有很多其他的示例,可以通过查看pinpong库的官方文档来学习:https://pinpong.readthedocs.io

———————正文完———————

78f9e1c5971786f7c7b2e6c83f4dc47a.png

推荐阅读: Mind+:深耕8年的国产青少年编程软件,支持AI人工智能与IoT物联网功能 00后大学生成功发射自制火箭!网友集体膜拜…… 你敢想却不敢做的,让AI来帮你实现!   课程设计与教学设计的区别是什么?   直播回顾 I 我与AI人工智能的一天 蘑菇云开放夜演讲人招募来啦! 回顾 I 初识AI,我能造些啥? 直播开课 | 如何零基础入门人工智能? 【文末超值福利】Mind+二哈识图双双更新,最全AI人工智能软硬件学习工具来袭!

点击,了解更多!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值