树莓派GPIO最入门教程:先从控制一个LED小灯开始

点亮LED

概述

本教程目的是用程序将 LED 灯点亮,3秒钟后灯自动熄灭。在所有软件编程语言中,第一个程序都叫 hello world,而今天的点灯教程其实就是硬件编程的 hello world,例子非常简单。

通过本节课,我们能学习到:

  • 硬件编程初体验

  • 面包板的使用

  • LED 原理

  • 通过 GPIO 来控制硬件

所需硬件

  • 树莓派 x1

  • 面包板 x1

  • 杜邦线 x2

  • LED灯 x1

名称解释

下面对本实验中要涉及到的一些电子元件和专业名称做简单介绍:

面包板

树莓派GPIO最入门教程:先从控制一个LED小灯开始

面包板是专为电子电路的无焊接实验设计制造的,板子上有很多小插孔,由于各种电子元器件可根据需要随意插入或拔出,免去了焊接,节省了电路的组装时间,而且元件可以重复使用,所以非常适合电子电路的组装、调试和训练。

由于最上一行和最下一行往往都是相通的,所以这两行往往用于连接电路的电源线和地线,而元器件之间的连接往往采用中的各列。中间部分每五列栅格为一组,这一组五个栅格是导通的,在最中间的位置有一条凹槽,用于隔断左右两部分。

LED 灯

LED 是英文 Light Emitting Diode(发光二极管)的缩写。它有2个脚,长脚是正极,短脚是负极。当有电流流过时,LED 就会亮起。

GPIO

GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。GPIO是个比较重要的概念,用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等。GPIO口的使用非常广泛,掌握了GPIO,差不多相当于掌握了操作硬件的能力。

现在,我们先看看树莓派上的GPIO是怎么样的,这是树莓派的正面图:

树莓派GPIO最入门教程:先从控制一个LED小灯开始

上面有40根排针,这就是树莓派用于控制外部传感器的接口,称之为 GPIO。40根引脚如何进行编号呢?如果按照物理位置来编号,只要掌握一个规则就容易记住: 最靠近角上的那一根引脚为2号引脚。旁边的就是1号引脚,具体请看上图示意图。

那么这40根引脚具体的用途和定义是什么呢,请看下面的图:

树莓派GPIO最入门教程:先从控制一个LED小灯开始

(这张图以后经常要用到,建议保存下来,方便以后使用)

这个图是一个比较全面的一个定义,主要是因为对于这40根引脚有不同的编号规则来定义 虽然不同的规则叫的名字不一样,但实际的用途是一致的 这里只学习一种编号规则,也就是物理位置编号,这样更容易进行物理连接。

比如:1号引脚,是输出1个3.3伏的电压,也就是如果用数字万用表去测量这根引脚的电压,会一直测出来是3.3伏。

比如:2号引脚,是输出1个5伏的电压,也就是如果用数字万用表去测量这根引脚的电压,会一直测出来是5伏。

比如:6号引脚,是一个GND,也就是接地,如果测量电压的话,就是0伏。

比如:11号引脚,是绿色图标,旁边写着GPIO17,其实这个接口就是普通的接口,可以输入也可以输出。如果设置为输出,则可以输出高电压或者低电压。输出高电压就是3.3伏,输出低电压就是0伏。可以通过程序来控制。GPIO17是另外一种编号方式而已,这里我们可以忽略。

假如需要一个恒定的电压输出到某个电路,则可以选择3.3v或者5v的相应接口。

假如需要一个变化的电压输出到某个电路,则可以选择绿色的GPIO接口,例如11号、12号、13号、15号等。

python GPIO

该库更确切的名称为raspberry-gpio-python,树莓派官方资料中推荐且容易上手。python GPIO是一个小型的python库,可以帮助用户完成raspberry相关IO口操作。但是python GPIO库还没有支持SPI、I2C或者1-wire等总线接口。除了python GPIO之外,还有众多的python扩展库(例如webiopi),毫无疑问的说python非常适合树莓派,树莓派也非常适合python。

rpio

这是一个 JavaScript 语言操作 GPIO 的库,方法名和参数和 python GPIO 非常接近,更多信息请浏览官方网站

连线图

在开始连接硬件电路之前,首先要做的事是将树莓派电脑关机,并断开电源。因为如果树莓派主板带电的时候,进行插接电路可能会导致电子元器件的烧毁,所以一定要记住:

|

连接电路的时候主板必须断电。

|

树莓派GPIO最入门教程:先从控制一个LED小灯开始

图片使用 Fritzing 绘制,更多示例图片请到 Fritzing官网 浏览。

电路原理图

树莓派GPIO最入门教程:先从控制一个LED小灯开始

示例代码

连好线后,接下来的工作就是写代码。想用 python 来控制 GPIO,最便捷的办法就是使用一些 python 类库,比如树莓派系统本身集成的

RPi.GPIO

本文详细介绍如何使用

RPi.GPIO

来控制 GPIO,当然,你可以用任何喜欢的语言来控制 GPIO。

导入RPi.GPIO模块

可以用下面的代码导入

RPi.GPIO

模块。

import RPi.GPIO as GPIO

引入之后,就可以使用 GPIO 模块的函数了。如果你想检查模块是否引入成功,也可以这样写:

try:
import RPi.GPIO as GPIOexcept RuntimeError:
print("引入错误")

针脚编号

在 RPi.GPIO 中,同时支持树莓派上的两种 GPIO 引脚编号。

第一种编号是

BOARD编号

,这和树莓派电路板上的物理引脚编号相对应。使用这种编号的好处是,你的硬件将是一直可以使用的,不用担心树莓派的版本问题。因此,在电路板升级后,你不需要重写连接器或代码。

第二种编号是

BCM规则

,是更底层的工作方式,它和Broadcom的片上系统中信道编号相对应。在使用一个引脚时,你需要查找信道号和物理引脚编号之间的对应规则。对于不同的树莓派版本,编写的脚本文件也可能是无法通用的。

你可以使用下列代码(强制的)指定一种编号规则:

GPIO.setmode(GPIO.BOARD)
# orGPIO.setmode(GPIO.BCM)

下面代码将返回被设置的编号规则

mode = GPIO.getmode()

警告

如果

RPi.GRIO

检测到一个引脚已经被设置成了非默认值,那么你将看到一个警告信息。你可以通过下列代码禁用警告:

GPIO.setwarnings(False)

引脚设置

在使用一个引脚前,你需要设置这些引脚作为输入还是输出。配置一个引脚的代码如下:


# 将引脚设置为输入模式GPIO.setup(channel, GPIO.IN)
# 将引脚设置为输出模式GPIO.setup(channel, GPIO.OUT)
# 为输出的引脚设置默认值GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

释放

一般来说,程序到达最后都需要释放资源,这个好习惯可以避免偶然损坏树莓派。释放脚本中使用的引脚:

GPIO.cleanup()

注意,GPIO.cleanup()只会释放掉脚本中使用的GPIO引脚,并会清除设置的引脚编号规则。

输出

要想点亮一个 LED 灯或者驱动某个设备,都需要给它们电流和电压,这个步骤也很简单,设置引脚的输出状态就可以了,代码如下:

GPIO.output(channel, state)

状态可以设置为0 / GPIO.LOW / False / 1 / GPIO.HIGH / True。如果编码规则为,GPIO.BOARD,那么channel就是对应引脚的数字。

如果想一次性设置多个引脚,可使用下面的代码:

chan_list = [11,12]GPIO.output(chan_list, GPIO.LOW)GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))

你还可以使用Input()函数读取一个输出引脚的状态并将其作为输出值,例如:

GPIO.output(12, not GPIO.input(12))

读取

我们也常常需要读取引脚的输入状态,获取引脚输入状态如下代码:

GPIO.input(channel)

低电平返回

0 / GPIO.LOW / False

,高电平返回

1 / GPIO.HIGH / True

如果输入引脚处于悬空状态,引脚的值将是漂动的。换句话说,读取到的值是未知的,因为它并没有被连接到任何的信号上,直到按下一个按钮或开关。由于干扰的影响,输入的值可能会反复的变化。 使用如下代码可以解决问题:

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# orGPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

需要注意的是,上面的读取代码只是获取当前一瞬间的引脚输入信号。

如果需要实时监控引脚的状态变化,可以有两种办法。最简单原始的方式是每隔一段时间检查输入的信号值,这种方式被称为轮询。如果你的程序读取的时机错误,则很可能会丢失输入信号。轮询是在循环中执行的,这种方式比较占用处理器资源。另一种响应GPIO输入的方式是使用中断(边缘检测),这里的边缘是指信号从高到低的变换(下降沿)或从低到高的变换(上升沿)。

轮询方式

while GPIO.input(channel) == GPIO.LOW:

边缘检测

边缘是指信号状态的改变,从低到高(上升沿)或从高到低(下降沿)。通常情况下,我们更关心于输入状态的该边而不是输入信号的值。这种状态的该边被称为事件。 先介绍两个函数:

  • wait_for_edge() 函数 wait_for_edge()被用于阻止程序的继续执行,直到检测到一个边沿。也就是说,上文中等待按钮按下的实例可以改写为:

channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)if channel is None:
print('Timeout occurred')else:
print('Edge detected on channel', channel)
  • add_event_detect() 函数 该函数对一个引脚进行监听,一旦引脚输入状态发生了改变,调用event_detected()函数会返回true,如下代码:

GPIO.add_event_detect(channel, GPIO.RISING)
# add rising edge detection on a channeldo_something()
# 下面的代码放在一个线程循环执行。if GPIO.event_detected(channel):
print('Button pressed')

上面的代码需要自己新建一个线程去循环检测event_detected()的值,还算是比较麻烦的。

不过可采用另一种办法轻松检测状态,这种方式是直接传入一个回调函数:

def my_callback(channel):
print('This is a edge event callback function!')
print('Edge detected on channel %s'%channel)
print('This is run in a different thread to your main program')GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

如果你想设置多个回调函数,可以这样:

def my_callback_one(channel):
print('Callback one')def my_callback_two(channel):
print('Callback two')GPIO.add_event_detect(channel, GPIO.RISING)GPIO.add_event_callback(channel, my_callback_one)GPIO.add_event_callback(channel, my_callback_two)

注意:回调触发时,并不会同时执行回调函数,而是根据设置的顺序调用它们。

好了,上面说明了一大堆函数库的用法,那么现在就应该来个简单的实验了

#!/usr/bin/env python
# encoding: utf-8
# 导入模块RPI.GPIO,命名为别名为GPIOimport RPi.GPIO as GPIO
# 导入time模块import time
# 声明 GPIO 使用物理编号方式,也就是11号口就是物理编号11号口GPIO.setmode(GPIO.BOARD)
# 声明11号口是用于输出模式GPIO.setup(11, GPIO.OUT)
# 设置11号口为高电压,也就是11号口变为3.3伏
# 这行代码执行之后,11号口变为高电压,
# 那么根据电路原理,led灯就会亮起来GPIO.output(11, GPIO.HIGH)
# 程序休眠3秒钟,程序休眠期间,led灯会一直亮着time.sleep(3)
# 设置11号口为低电压,也就是11号口变为0伏,和GND一样
# 这行代码执行之后,11号口变为低电压,那么根据电路原理,led灯就会熄灭GPIO.output(11, GPIO.LOW)
# 将所有的GPIO口状态恢复为初始化,一般代码结束都执行此代码,这是一个好习惯GPIO.cleanup()

保存文件为

led.py

,并运行之,看看 LED 灯是否亮3秒后熄灭。

sudo python led.py

最终效果

树莓派GPIO最入门教程:先从控制一个LED小灯开始

原文始发于:树莓派GPIO最入门教程:先从控制一个LED小灯开始

|

树莓派python编程 做一个LED呼吸灯

呼吸灯

概述

上一篇 我们通过控制GPIO口输出高低电平来控制一只 LED 的亮灭。这次我们来控制 LED 的亮度,灯由暗渐渐变亮,再由亮渐渐边暗,反复循环,也就是呼吸灯的效果。按 Ctrl+C结束程序

通过本节课,你能学习到:

  • 脉冲宽度调制技术

所需硬件

  • 树莓派 x1

  • 面包板 x1

  • 杜邦线 x2

  • LED灯 x1

名称解释

我们知道,通过LED的电流越大,LED越亮,电流越小,LED越暗。如果可以控制输出电流大小就可以控制LED的明暗了。但是树莓派的各引脚并没有直接调整输出电流大小的功能,要想别的办法。这里,我们需要了解以下2个名词:

脉宽调制(PWM)

脉冲宽度调制(PWM)是一种利用数字手段获得模拟结果的技术。数字控制用于创建方波,电平在高和低之间切换。简单的说,PWM技术就是不停的通断电路并控制通断持续的时间片段长度,从而控制用电器在单位时间内实际得到的电能。再简单点说,如果你的手足够快,打开电灯开关后马上关闭,如果这个时间间隔足够短,灯丝还没有全部亮起来就暗下去了。你再次打开电灯再关闭,再打开再关闭……如果你一直保持相同的频率,那么电灯应该会保持一个固定的亮度不变。理论上,你可以通过调整开灯持续的时间长度和关灯持续的时间长度的比例就能得到不同亮度了。

“导通时间”的持续时间称为脉冲宽度。要获得不同的模拟值,可以更改该脉冲的宽度。

占空比

一个脉冲循环内通电时间所占的比例。

树莓派python编程 做一个LED呼吸灯

连线图

在开始连接硬件电路之前,首先要做的事是将树莓派电脑关机,并断开电源。因为如果树莓派主板带电的时候,进行插接电路可能会导致电子元器件的烧毁,所以一定要记住:连接电路的时候主板必须断电。本次的接线图和上一篇(第一个GPIO控制LED小灯的程序)连线图完全一样

树莓派python编程 做一个LED呼吸灯

图片使用 Fritzing 绘制,更多示例图片请到 Fritzing官网 浏览。

电路原理图

树莓派python编程 做一个LED呼吸灯

示例代码截图防缩进失效!!!

树莓派python编程 做一个LED呼吸灯
树莓派python编程 做一个LED呼吸灯

保存文件为

breathing-light.py

,并运行之。

sudo python breathing-light.py

最终效果

树莓派python编程 做一个LED呼吸灯

相关课程目录

原文始发于:树莓派python编程 做一个LED呼吸灯

|

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

硬件

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

树莓派3代B型主板

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

Scratch编程小车红外追踪

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

整体供电使用两节3.7V的18650锂电池。树莓派需要5V供电,所以需要使用一个转5V的降压模块Lm2596模块。组装跟之前C语言控制小车一样。

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

现在我们来学习树莓派小车用Scratch编程。

首先打开所有程序—>编程——Scratch>

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

打开软件可以讲语言设置为中文

树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

我们通过Scratch软件去控制小车,这就意味着我们的主要工作是用此软件去控制树莓派GPIO,以及利用它去通过GPIO接收传感器发来的讯号并对信号进行处理。

打开软件的第一步:设置StartGPIOServer树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

一切准备工作就绪,接下来。我们开始吧树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

当旗标被点击时,gpioserveron即打开GPIOSERVER,然后设置引脚18 23 24 25(BCM编码方式,对应wpi编码方式的GPIO1、4、5、6)为out输出模式。设置引脚12 16(BCM编码方式,对应wpi编码方式的GPIO26 27)为in输入模式,输入模式下可以接收传感器发送过来的高低电平讯号。首先看一下怎么通过两个红外传感器或者光敏电阻传感器进行物体跟踪或者光源追踪。树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

我们已经设置了12 16引脚为输入模式,设定左侧的传感器接12引脚,右侧的传感器接16引脚。那么我们添加判断语句,当两侧的红外传感器都有障碍物在前方时直行,左侧有障碍物时则左转,右侧有障碍物时则右转,无障碍时则保持静止。若12 16引脚接的是关敏电阻传感器则寻光走。同样的道理黑线循迹也可以实现。

接下来,如何使用按钮控制小车前进后退左右。树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

如果这样设置,那么当我按下W键时小车一直向前不会停止。这样未免有点不好操作。所以我把运行步骤改了一下:树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

向前0.001秒后停止,这样的话只要一直按住w则小车前进,松开后即停止。同理后退左右也是。大家可以根据自己的需要自己编写脚本。或者先运行我写好的一个小脚本。

稍后评论区放脚本文件

原文始发于:树莓派Scratch入门教程——最简单的方式制作智能小车GPIO篇

|

用树莓派Scratch给家里的小朋友做个小玩具吧

用LED为您的机器人制造天线

让我们亲手实践电子产品!这是Raspberry Pi派上用场的地方。您将编程一个发光二极管(LED)闪光。首先你需要制作一个电路。

  1. LED具有短腿和长腿。在长腿上插入跳线。

  2. 将电阻插入同一跳线的另一端。

  3. 在电阻的另一端加上另一根跳线。

  4. 将另一根跳线和一端插入LED的短脚。你应该最终得到如下所示的东西:

    用树莓派Scratch给家里的小朋友做个小玩具吧

  5. 使用下图,找到Raspberry Pi上的第一个3V3引脚和GND引脚:

    用树莓派Scratch给家里的小朋友做个小玩具吧

    Raspberry Pi上的通用输入输出(GPIO)引脚可以听外界,可以进行控制或编程。每个针具有特定的作用。为了使生活更轻松,引脚被编号以供参考。3v3引脚用于电源,GND引脚用于接地。

  6. 将电阻器跳线插入Raspberry Pi的3V3引脚,将另一根跳线插入GND引脚。

  7. 插入micro USB电源,您应该会看到屏幕上出现一些文字。

光天线如何工作

现在你有一个电路,LED应该打开。如果不是,请通过检查上图来确保将跳线插入正确的引脚。

那么为什么LED发光呢?

当电路插入Raspberry Pi GPIO引脚时,电能流过它。此流程称为当前流。当电流从长腿通过灯泡流到短腿时,LED仅点亮。

该电阻减少了通过电路的电流量。这样可以保护LED免受破坏,因为高电流会使光线更亮,然后停止工作。

做得好!你为你的机器人做了天线。现在我们需要做一些编程来控制它。

使天线闪烁代码

现在你有一个天线点亮,你可以写一个程序来告诉LED当你想要它。

对于本节,您将需要使用针17而不是3V3来为您的LED供电。针17是特殊的,因为它可以打开和关闭电源 – 如果你告诉它!按照以下说明学习如何切换引脚。

  1. 关闭您的Raspberry Pi,然后卸下电源线。将连接到电阻器的跳线从3V3引脚移动到GPIO引脚17.参见下图,确保电路正确:

    用树莓派Scratch给家里的小朋友做个小玩具吧

  2. 将电源线连接到Raspberry Pi,然后等待它启动。

  3. 单击菜单和编程,然后单击Scratch打开Scratch。

  4. 单击编辑并启动GPIO服务器(如果尚未启动)。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  5. 右键单击Scratch cat,然后从菜单中选择delete。

  6. 然后点击按钮获取一个新的精灵,并从幻想文件夹中选择robot3。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  7. 点击控制。将when green flag clicked块拖动到脚本区域。然后broadcast在下面连接一个块。点击广播块上的下拉菜单,选择新的。

    在消息名称框中键入config17output此指令将告诉Raspberry Pi,该引脚17将是一个输出。这是因为您正在告诉引脚打开一个作为输出组件的LED。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  8. when space key pressed块拖动到脚本区域。然后单击声音并将该play sound块拖放到脚本区域并将其连接到控制块。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  9. 单击脚本区域上方的“ 声音”选项卡,然后单击“ 导入”。选择电子,然后选择ComputerBeeps2。这将添加到声音选项卡。

  10. 现在通过单击脚本选项卡返回到脚本区域。点击旁边的下拉框播放声音。选择您刚从菜单导入的声音。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  11. 测试你的程序到目前为止,按空格键。应该哔哔声

  12. 点击文件并另存为,保存工作到目前为止。命名您的文件机器人并单击确定。

  13. 单击块调色板中的控件,并将块拖动broadcast到脚本区域,并将其附加到播放声音块。点击广播块上的下拉菜单,选择新的。

    在消息名称框中键入gpio17on此指令将告诉Raspberry Pi点亮LED。

    用树莓派Scratch给家里的小朋友做个小玩具吧

  14. wait 1 second块拖动到脚本区域并将其连接到广播块。

  15. 通过点击机器人精灵来测试你的程序。你应该看到LED闪耀并保持开启。

  16. 将另一个broadcast块拖动到脚本区域并将其连接到等待1秒的块。点击广播块上的下拉菜单,选择新的。

    在消息名称框中键入gpio17off这将关闭LED。

  17. 现在添加另一个wait 1 second块到脚本。

  18. 通过点击机器人精灵再次测试您的程序。您应该看到LED亮起一秒钟,关闭一秒钟。

用树莓派Scratch给家里的小朋友做个小玩具吧

制作纸板机器人

您将制作纸板机器人并添加您的光天线。

  1. 在一张A4纸上,绘制或打印您自己的机器人设计。它应该被绘制的肖像,所以它可以包裹在你的纸板管。确保它有一个天线!

  2. 在机器人图片中的颜色,并仔细切出。

  3. 将机器人围绕纸板管纵向缠绕。

用树莓派Scratch给家里的小朋友做个小玩具吧

  1. 将机器人胶粘或胶带到位。

  2. 在纸板管内的机器人天线后面贴上橡皮泥或蓝宝石。

用树莓派Scratch给家里的小朋友做个小玩具吧

将一支铅笔推入天线,穿过纸板管。

用树莓派Scratch给家里的小朋友做个小玩具吧

  1. 取出橡皮泥。

  2. 将跳线,LED和电阻的电路放在纸板管内。将LED推入管中的孔,使机器人的天线。

  3. 给你的机器人一个名字,并欢迎它到世界。

恭喜!您的机器人已经完成!

接下来是什么?

  • 你能使纸板机器人的天线保持长时间吗?

  • 你能让闪光灯多次闪光吗?

  • 尝试录制新的声音播放,当您的节目播放。

原文始发于:用树莓派Scratch给家里的小朋友做个小玩具吧

|

树莓派Scratch控制GPIO说明文档

Scratch GPIO

随着2015年9月发布的Raspberry Pi Scratch,包含在Raspbian Jessie版本中,我们推出了一款新的GPIO服务器,使LED,蜂鸣器,HATS以及其他设备和组件更加轻松。

使用和基本功能

启动服务器

在使用GPIO引脚之前,您必须启动GPIO服务器。有几种方法可以做到这一点:

  • 从编辑菜单中选择启动GPIO服务器将其打开。如果服务器已经运行,则停止GPIO服务器将其关闭。

  • 一个暂时播放gpioserverongpioserveroff将会有相同的效果。

  • 当GPIO服务器运行时保存的项目将记录该状态,并且在加载时将尝试启动服务器(如果启用)。

  • 您也可以在临时INI文件中设置一个选项。见下面的附录。

基本的GPIO使用

没有任何进一步的设置,您现在可以访问GPIO系统的基础知识。目前使用广播块向GPIO服务器发送命令,就像原始的网状网络广播消息一样。

例如,要将GPIO引脚4配置为输出并将其打开,您将创建以下两个广播:

树莓派Scratch控制GPIO说明文档

和往常一样,您可以使用正常的连接,选择或列表处理块来组合此文本。例如,如果foo= 17,那么

树莓派Scratch控制GPIO说明文档

将广播gpio17on并因此设置GPIO引脚号17(在BCM编号下 – 不是物理或接线号码!)on。引脚需要配置才能使用它们做任何事情。我们可以设置引脚的方向(输入或输出),对于输入引脚,可以设置上拉模式(上,下,无)。

  • 对于输入引脚,我们可以使用’in’或’input’。这两个都被视为与“inpullup”或“inputpullup”相同,默认设置上拉电阻来拉起信号。

  • 要设置上拉电阻将信号拉低,我们使用’inpulldown’或’inputpulldown’

  • 我们可以将上拉电阻设置为“inpullnone”或“inputpullnone”

  • 输出引脚简单地通过“输出”或“输出”

  • 通过PWM输出,使LED发光部分亮起或使电机以可变速度等运行非常有用,配置为’outputpwm’

例如:

树莓派Scratch控制GPIO说明文档

设置为输入的引脚连接到Scratch传感器变量系统,因此它们显示在传感器模块中可能的值列表中:

树莓派Scratch控制GPIO说明文档

并且可以以相同的方式使用:

树莓派Scratch控制GPIO说明文档

在运行配置广播之后,您将不会在列表中找到您的输入引脚。在此之前,GPIO服务器无法知道您希望它是一个输入。保存项目时,输入仍将被挂起。

通过这些非常简单的命令,您可以构建相当复杂的GPIO处理脚本来读取按钮并操作LED,电机等。我们还有命令返回时间,返回机器IP地址,读取各种温度,读取超声波距离传感器,获取天气报告,甚至使用附带的Raspberry Pi相机模块拍摄照片并将其设置为当前服装。

此脚本(传感器和电机文件夹中提供的传感器和电机/ gpio-demo)说明了上述大部分内容:

树莓派Scratch控制GPIO说明文档

随着适当配置的面包板,它提供了通过按下按钮打开和关闭LED的能力,以逐渐增亮的LED提供的倒计时照片,检查时间的方式等。

树莓派Scratch控制GPIO说明文档

请注意,我们可以有一个包含多个消息的广播,如

gpio24on gpio18pwm400

上面的脚本。

基本的GPIO命令

在下面的命令列表中,我们使用

[comm] + pin number + [ on | off]

指示形式的命令

comm17off或comm7on。

对于一个变量,

led + light number (1..5) = ( 0 .. 100)

表示一个名为的变量

led5可能具有从0到100的值。同样,foo = ( 1 | 4 | 7 )表示变量foo可以设置为1,4或7。

简单的GPIO控制

您可以在没有任何HAT插入您的Pi的情况下执行的基本GPIO命令列表如下所示:

  • 设置为PWM引脚

  • gpio + pin number + [ on | high | off | low ]打开或关闭输出例如,gpio17on

  • 打开引脚17。gpio + pin number + pwm + [ 0..1024 ]

  • 使用PWM输出例如,gpio22 pwm 522

将PWM占空比设置为1024,即1024或大约一半的功率。请注意,许多LED不会以简单的线性方式改变其亮度,因此522可能几乎不发光或接近完全亮度。

伺服驾驶

  • servo + pin number + [percent | %] + [-100…100]

    将连接的伺服器移动到位置。例如servo15%0,将伺服放置在其范围的中心。

  • servo stop

    关闭伺服驱动器。

在Servos和Motors / gpio-servoDemo脚本中,您可以看到如何移动伺服器或将其连接到像Sprite位置的变量。您需要将伺服电缆连接起来,如下所示:

树莓派Scratch控制GPIO说明文档

超声波传感器

ultrasonic + trigger + trigger pin + echo + echo pin

  • 连接典型的SR04超声波传感器

ultrasonic stop

  • 在脚本结束时关闭传感器支持

这里是使用引脚16作为触发器的布线布局示例,而作为回波的是26:

树莓派Scratch控制GPIO说明文档

如果您使用传感器和电机/ gpio-ultrasonicDemo中的脚本使用此接线设置,您将看到如何阅读距离并按顺序移动sprite。传感器和电机/ gpio-ultrasonicIntruderAlarm中的另一个超声波演示需要一个相机模块,并且当任何人太靠近时会拍摄快照。

天气报告

getweather + city name + , + country two-letter code + , + your user key from [OpenWeatherMaps](http://www.openweathermaps.org)

  • 将为指定的城市的温度,风速和方向,降雨量和云层创建传感器变量。您必须注册才能从中获取密钥(可用的免费帐户)。有关详细信息,请参阅OpenWeatherMaps。

例如

getweather Rio de Janeiro, BR, 1234EF65B42DEAD

将使传感器变量

Rain in Rio de Janeiro

Temp in Rio de Janeir0

…等等。城市名称和国家/地区代码之间的逗号和密钥对于让GPIO服务器知道哪里分割的东西至关重要。一些城市有简单的名字,如“Ee”或“Manchester”,而其他城市则更像“Sault Ste Marie”或“Llanfairpwllgwyngyllgogerychwyrndrobwllllantysilioogogog”。请注意,OpenWeatherMaps服务器不知道每个国家的每个城市,也不知道它所知道的所有的天气数据,所以有时您将无法获得有用的信息。

该脚本传感器和电机/ GPIO-citytemperaturegraph演示了如何获取气象数据,伦敦和积的温度。由于天气数据通常不会快速变化,我们只能每15分钟获取一次数据,以免网站超载。

阅读温度

gettemp

  • 连接到几个可能的温度传感器。

gettemp + cpu

  • 读取cpu温度并创建一个传感器变量

cputtemp

  • 。例如:

gettempcpu

  • 。绘制CPU温度图的示例项目可以在传感器和电机/ gpio-cputtemperaturegraph项目中找到。

gettemp + [a previously discovered twelve-digit 1-wire id]

  • 如果可能,将直接连接到识别的DS18B20传感器。

    请注意,1线传感器需要大约半秒钟才能读取,因此经常读取传感器可能会使Scratch显得非常慢。

gettemp

  • 本身将尝试找到一个附加的1线DS18B20热敏传感器,并创建一个名为的传感器变量

temp + [the twelve-digit sensor ID]

相片

photo

  • 使用照相机拍摄照片并将其插入当前精灵的服装(如果选择了舞台)。

photo + [width @ height]

  • 将照片尺寸宽度乘以高度像素,直到相机的极限。您可以尝试几乎任何合理的数字的宽度和高度,但请记住,非常小的数字(32以下)不一定产生正确的图像,非常大的数字可以使图像如此之大,似乎崩溃Scratch。例如,

photo800@600

通常是可以接受的,但photo2000@1600可能会导致问题。

photo + [big/large]:“大”照片与舞台大小相同。例如:

photobig或photo large。

gettime

  • 将一些时间值添加到传感器变量,特别是hours值,minutes值,以及完整的日期和时间YYMMDDhhmmss。

getip

  • 为机器的本地主机地址IP号添加一个传感器变量。

附加硬件

我们还可以控制Pi附加板,如PiGlow,Pibrella,Explorer HAT等。要设置一个板,我们首先需要通知GPIO服务器是什么板;

这是通过创建和设置变量来完成的

AddOn,如下所示:

树莓派Scratch控制GPIO说明文档

每个主板都有自己的一套命令,分布在上述基本的GPIO设备之上。许多电路板也可以利用Scratch变量广播,从而创建一个合适的名称变量,并在变化时广播它的值。

例如,对于PiGlow板,将每个LED或LED环命名的变量设置为有意义,并将每个值设置为控制亮度的一种方式。同时使用这两种形式的控制可能造成混乱;

myCommand400

以与设置

myValue

为200 相同的脚本播放可能会在极端情况下导致闪烁,明显的非功能甚至硬件故障。

所有您需要做的是创建一个适当名称的变量,并使用正常的脚本块设置其值。

一些电路板提供可以通过传感器变量访问的输入,如上面在引脚11的示例使用中所示。

PIGLOW

PiGlow板有几个明亮的LED环,可以单独或一起控制为环,腿。小心:看起来可以有点明亮,所以使用一些描图纸或有色皮肤制成的扩散器是一个好主意。要使用板,设置AddOn到PiGlow。

PiGlow有很多命令,其中许多都在传感器和电机/ gpio-PiGlow项目中得到证明。

支持的命令

leg + leg number [ 1 | 2 | 3 ] + [ on | high | off | low ]

  • 例如

leg2off

[ red | orange | yellow | green | blue | white ] + [ on | high | off | low ]

  • 例如 redlowarm

  • – 如

bright + [ 0 .. 255 ] (设置任何后续LED指示灯的亮度乘数)

[ led | light ] + led number + [ on | high | off | low ]

  • 例如 light12high all + [ on | high | off | low ]

变量bright = ( 0 .. 255) led pattern =(作为二进制数字处理的18个字符的字符串,如“011111101010101010”,其中任何不为0的字符串被认为是1)

[ red | orange | yellow | green | blue | white ] = ( 0 .. 255)

[ leg | arm ] + [ 1 | 2 | 3 ] = (0 .. 255)

[ led | light ] + led number (1..18) = (0 .. 255)

PIFACE

PiFace数字板提供八个数字输入和八个数字输出,前四个输入具有并行开关,前两个输出具有20V / 5A继电器。设置

AddOn为PiFace激活此板。

支持的命令all + [ on | off] output + output number + [ on | high | off | low ]

  • 例如

output6on

变量output + [ 0 .. 7 ] = (0 |1 )

  • – 值被舍入,并受到最大/最小限制,因此-1轮次最多为0和400000000轮次,减少到1。

还有八个输入传感器变量,命名

Input1为Input8,具有可能的值(0/1)。该传感器和电机/ GPIO-PiFace项目说明了如何使其发挥作用。

PIBRELLA

这提供了一个很好的大红色按钮,三个大LED,四个数字输入,四个数字输出和一个响亮的蜂鸣器。要使用此板,请设置AddOn为Pibrella。

命令中止

[ red | yellow | green ] + [ on | high | off | low ]

  • 例如

yellowhigh

Output + [ E | F | G | H ] + [ on | high | off | low ]

Buzzer + (0 .. 4000)

  • 例如

buzzer2100

变量

Buzzer = (0..10000)

Output + [ E | F | G | H ] = (0 |1 )

[ red | green | yellow ] = (0 |1 )

输入A,B,C,D和大红色按钮作为传感器变量提供,均具有可能的值(0/1)。汽车和传感器/ gpio-pibrella有一个演示。

EXPLORER HAT PRO

这个板卡对于驱动器来说更是一个挑战,因为它具有与GPIO连接的部分和I2C连接的部件:

  • 四个LED

  • 四个5V输出连接器

  • 四个缓冲输入连接器

  • 两个H桥电机驱动器

  • 四个模拟输入

  • 四个电容式输入板

要使用此板,请设置

AddOn为ExplorerHAT。

支持的命令

led + led number ( 1 .. 3) + [ on | high | off | low ]

motor + motor number (1|2) + speed + (0..100)

  • – 电机速度设置为百分比,例如

motor1 speed 42

output + input number ( 1 .. 3) + [ on | high | off | low ]

它们具有匹配的变量形式:

led + led number = (0 |1 )

motor + motor number (0|1) = (0..100)

output + led number = (0 |1 )

变量也有传感器的变量Input1-Input4使用值(0 | 1),和四个ADC引脚(1。4)用值+ -6.1V。如果信号源自连接到Explorer HAT的5V / GND的电位器,则范围为(0 ..〜5)。

在演示脚本传感器和电机/ GPIO-ExplorerHAT要求连线一个电动机,带动,旋转电位计等,如图该图

请注意,电容输入焊盘尚未运行,需要一些库级支持。

传感器HAT(如ASTRO PI所用)

这个基础制造的电路板提供了一系列不寻常的传感器和一个8 x 8的RGB LED阵列。

传感器测量:

  • 温度

  • 湿度

  • 压力

  • 加速度计/陀螺仪

  • 磁力计/指南针

  • 迷你操纵杆动作左/右/上/下/返回

要使用此板,请设置

AddOn为SenseHAT。支持的命令clearleds:将所有LED设置为背景颜色edbackground + colour

  • 或者ledforeground + colour

  • 设置要使用的字符串和图形命令的背景颜色和前景颜色。颜色指定为以下之一:

  • 从名单中的名字红色青色蓝色灰色黑色白色绿色棕色棕色橙色黄色洋红色淡棕色白an淡淡淡蓝色苍白黑色黑色…蓝色

  • 一个HTML样式的六位十六进制数字,以哈希符号开头

#34F2A0

  • 或0到255之间的数字的RGB三元组,例如

ledscrollspeed + [number of milliseconds delay per step of scrolling]

  • :一个字符串

ledpixel + [ x | at] + [0..7] + [y | @] + [0..7] + [colour | color] + [colour name or code as ledbackground]

  • 。例如:

ledpixelx4y3colourwhite

  • or

ledpixelat2@7color42,231,97

  • or

ledpixelx3@1colour#4A76A0

ledscrollstring + [string]

  • :用以前设置的前景和背景颜色滚动以下字符串,例如

ledscrollstring HelloWorld

ledshowsprite + [name of sprite]

  • :在LED上显示命名的精灵,例如

ledshowsprite Sprite1

  • 。精灵集中在8 x 8阵列上,所以你可能会看到很少的一个大的精灵。

ledbargraph + [8 digits 0..8]

  • :使用以前设置的前景和背景颜色制作最多八位数的简单条形图

ledbargraph20614590

ledshowchar + [character]

  • :只显示一个单一的字符与以前设置的前景和背景颜色

变量

gyroX

humidity

gyroY

pressure

gyroZ

temp

accelX

compassZ

accelY

compassY

accelZ

compassX

PI-LITE

Pi-LITE板提供了一个简单的白色LED阵列,可以单独寻址或被视为滚动文本显示,条形图或VU表。它通过GPIO串行端口工作,并提出了一些有趣的挑战,特别是在[RaspberryPi-Spy的Pi-LITE指令]中详细介绍了串行连接的设置(http://www.raspberrypi-spy.co.uk/2013/09/如何设置-i-lite-led-matrix-board /)。支持的命令

尽管它们的工作方式差别很大,但它们共享相同的命令

motor + motor number (1|2) + speed + value (-100..100)

变量

motor + motor number (0|1) = (-100..100)

附录:启用和禁用GPIO服务器

在正常使用中,您不需要启用GPIO服务器,因为默认情况下启用但停止。我们可以通过在init文件中添加一行来改变它。在主目录中,我们可以使用一个名为的文件

.scratch.ini

– 初始点对于使其成为隐藏的Unix文件非常重要。只需将该行添加

gpioserver=X

到文件中,其中X是:

0

  • – 禁用GPIO服务器,阻止用户或加载的项目使用它

2

  • – 启用和启动服务器,这可能在课堂上有关GPIO使用的教训

1

  • – 启用GPIO服务器,但将其关闭,这是没有

.scratch.ini

  • 文件时的默认值

请注意,旧的网状网络/网络服务器设置当前在“ 共享”菜单下半隐藏:您必须在打开该菜单时按住shift键。它与以前一样工作,仍然连接到外部基于套接字的服务器。

原文始发于:树莓派Scratch控制GPIO说明文档

|

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

介绍

这是一个树莓派实时监测的项目,需要参考上文,可在web上显示实时的温度及湿度变化情况。

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

Demo

http://yfgeek.eu.ngrok.io/web/index.html

架构

前端:Semantic UI + eCharts + JQuery Datapicker

后端:Python + Apache

  • 支持断点续传

  • json文件输出

  • 后端轻量、稳定

原料

  • 树莓派3B

  • DHT11

  • LCD1602

  • 2K电阻(也可以是电位器)

  • 子-母 和 母-母 杜邦线

  • 电气绝缘胶带

  • 剪刀

接线

我们一共要完成两个任务:

  • 1.连接LCD1602

  • 2.连接DHT11

树莓派3B的GPIO图如下:

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

2K 电阻如何连接到电路

简单粗暴的方法就是把电阻两头连接到两个子-母杜邦线上,然后用绝缘胶布缠上,非常方便美观。

LCD1602 接线方案

LCD 与 树莓派相连 方案图,2K电阻是我自行设计,如果有电位器最好放置电位器:

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

树莓派的USB端口朝下,电源线位置朝上方向摆放。 右端一共有40个引脚,每个引脚的PIN位置如上。

VSS,接地,RPi PIN 6 VDD,接5V电源,PRi PIN 2 VO,液晶对比度调节,接1K 电阻,另一端相连接地,PIN 9 RS,寄存器选择,接GPIO 14,RPi PIN 8 RW,读写选择,接地,表示写模式,PRi PIN 30 E,使能信号,接GPIO 15,RPi PIN 10 D0,数据位0,4位工作模式下不用,不接 D1,数据位1,4位工作模式下不用,不接 D2,数据位2,4位工作模式下不用,不接 D3,数据位3,4位工作模式下不用,不接 D4,数据位4,接GPIO 17,RPi PIN 11 D5,数据位5,接GPIO 18,RPi PIN 12 D6,数据位6,接GPIO 27,RPi PIN 13 D7,数据位7,接GPIO 22,RPi PIN 15 A,液晶屏背光+,接5V,RPi PIN 4 K,液晶屏背光-,接地,RPi PIN 39

连接好后,务必要仔细检查是否连接正确,以防开机烧坏GPIO甚至树莓派。

建议在关机情况下接线,如果在开机情况下接线,VDD请最后连接。

LCD1602 开机测试

接通电源线,默认情况下,如果连接正确:

  • 肯定没有爆炸

  • 会出现如下图的效果,证明你已经接线成功了

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

DHT11 接线方案

接线简单,主要是把数据传输到GPIO26上

DHT11有3个脚,VCC,DATA,GND VCC,接 3.3V,PIN 01 DATA,接 GPIO26,PIN 37 GND,接地,PIN 09

DHT22 接线方案

接线需要并联一个10K电阻

DHT22有3个脚,VCC,DATA,GND VCC,接 3.3V,PIN 01 DATA,接 GPIO26,PIN 37 GND,接地,PIN 09 其中DATA和VCC之间用10k电阻相连

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

依赖

  • Adafruit_DHT

  • Adafruit_CharLCD

  • Nginx/Apache (请自行提前安装)

安装依赖

sudo apt-get update sudo apt-get install python-dev python-rpi.gpio sudo apt-get install build-essential python-dev python-smbus python-pip git clone https://github.com/adafruit/Adafruit_Python_DHT.gitcd Adafruit_Python_DHT sudo python setup.py
 install sudo pip install RPi.GPIO git clone https://github.com/adafruit/Adafruit_Python_CharLCDcd Adafruit_Python_CharLCD sudo python setup.py
 install

安装

cd /var/www/html git clone https://github.com/yfgeek/rpi-TempRuntime.git

运行

cd /var/www/html/rpi-TempRuntime python DHT11.py

结果

基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

|

项目地址:https://github.com/yfgeek/rpi-TempRuntime

|

原文始发于:基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统

|

树莓派使用DHT11温湿度传感器

树莓派使用DHT11温湿度传感器

DHT11是一种低成本的温湿度传感器。它不是最快的传感器,但其便宜的价格对于小的实验或项目很有用。该设备只需要三个引脚连接到树莓派。+ 3.3v,接地和一个GPIO引脚。

DHT11规格

设备本身有四个引脚,但其中一个引脚不被使用。你可以自行购买4针设备或3针模块都行。

树莓派使用DHT11温湿度传感器

模块有三个引脚,可以方便地直接连接到Pi的GPIO引脚。

  • 湿度:20-80%(精度5%)

  • 温度:0-50°C(±2°C精度)

制造商建议您不要在每2秒钟内多次从该设备读取数据。这样做可能会读不正确

硬件设置

树莓派使用DHT11温湿度传感器

4引脚器件需要在引脚1(3.3V)和引脚2(data数据)之间放置一个电阻(4.7K-10K)。

3引脚模块通常会包含这个电阻,使布线更容易一些。因此,我拿起了一个模块,然后用一条3pin杜邦线连接到Pi上。

3个引脚应连接到Pi,如下表所示:

DHT针 信号 引脚Pin
1 3.3V 1
2 数据输入/输出 11(GPIO17)
3 不曾用过
4 地面 6或9

data引脚可以连接到任何GPIO引脚。在我的例子中,使用了GPIO 17即物理引脚11。这是一个4针温湿度传感器。引脚1(3.3V)和2(数据/输出)之间具有10K电阻。

树莓派使用DHT11温湿度传感器

Python库

DHT11需要将特定协议应用于数据引脚。为了节省时间尝试实现这一点,使用Adafruit DHT库更容易。软件设置

要开始更新软件包列表并安装几个Python库:

sudo apt-get update  sudo apt-get install build-essential python-dev

然后从其存储库克隆Adafruit库:

git clone https ://github.com/adafruit/Adafruit_Python_DHT.git  CD Adafruit_Python_DHT

然后安装Python 2和Python 3的库:

sudo python setup.py
 install  sudo python3 setup.py
 install

执行完之后,该库已安装并可以在Python中使用。

Adafruit示例Python脚本

Adafruit提供了一个示例脚本,您可以使用它来检查传感器是否正常运行。

cd 〜  cd Adafruit_Python_DHT cd examples

然后 :

python AdafruitDHT.py
 11 17

示例脚本需要两个参数。第一种是传感器类型,因此设置为“11”以表示DHT11。第二个是GPIO号,所以在我的例子中,我对GPIO17使用“17”。如果您使用不同的GPIO引脚进行数据/输出线,则可以进行更改。

您应该会看到类似的输出:

Temp= 22.0 *Humidity= 68.0%

在其他Python脚本中使用库

一旦安装了Adafruit库,并且您已经使用了示例脚本,您可以在自己的python脚本中使用。简单地导入模块,设置几个变量并调用“read_retry”函数:

import Adafruit_DHT
# Set sensor type : Options are DHT11,DHT22 or AM2302 sensor=Adafruit_DHT.DHT11
# Set GPIO sensor is connected to gpio=17
# Use read_retry method. This will retry up to 15 times to
# get a sensor reading (waiting 2 seconds between each retry). humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)
# Reading the DHT11 is very sensitive to timings and occasionally
# the Pi might fail to get a valid reading. So check if readings are valid. if humidity is not None and temperature is not None:
print('Temp={0:0.1f  }*C Humidity={1:0.1f  }%'.format(temperature, humidity))
 else:
print('Failed to get reading. Try again!')

此脚本可以直接下载到您的Pi使用:

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/dht11.py

并运行使用:

python dht11.py

购买DHT11

DHT11可从许多电器组件销售商处获得。例如得芯电子

原文始发于:树莓派使用DHT11温湿度传感器

|

AutoPi,开源平台“改善”您的汽车

AutoPi,开源平台“改善”您的汽车

丹麦的一家名为AutoPi.io的初创公司发布了一款基于Raspberry Pi Zero W的AutoPi软件狗,该软件插入同一个OBD-II端口,汽车维修人员用它来运行诊断程序并挖掘其他远程信息处理功能。

AutoPi.io打算将AutoPi及其相关云服务作为一种经济实惠的DIY类型开放平台,以创建汽车应用,包括语音识别,远程启动,自动门锁和解锁,碰撞和盗窃检测,生态驱动优化,移动设备热点,交通监控,甚至触摸屏HUD设备和停车辅助小玩意儿。

Linux驱动的AutoPi是基于WiFi和蓝牙,基于1GHZ ARM11的Raspberry Pi Zero W而构建的。附加在Zero W上的附加板包括带电源管理的安全OBD模块,加速度计,扬声器,GPIO引脚,两个USB主机端口和一个迷你HDMI端口。

AutoPi有三种不同的版本可供选择:

– 仅限197美元的

Wifi – 带微型SIM插槽的wifi + 4G / LTE收音机和收费为261美元的GPS芯片

– 收费为98美元的DIY版本。它由与Raspberry Pi 3配合使用的简化的AutoPi HAT板组成。此型号缺少4G,GPS,扬声器,线缆和扬声器。HAT适配器还缺乏WiFi,BT以及USB和HDMI端口,但这些端口由RPi 3提供。

位于AutoPi Cloud服务上的开发平台包括可定制的仪表板,基于REST的API以及从现场终端运行命令的能力。虽然开发平台是开放的,但这里没有关于开源硬件的具体要求。

AutoPi,开源平台“改善”您的汽车

原文始发于:AutoPi,开源平台“改善”您的汽车

|

Arduino基础入门篇21—点阵流动显示

|

    阅读本文大概需要7分钟。

|

在各种公共场合看到的点阵屏大多都有流动显示效果,显示内容可以上下左右的滚动,本篇我们来实现点阵屏的流动显示。

1. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 8*8点阵屏

2. 实验步骤

1. 根据原理图搭建电路。

依然是前篇点阵屏电路连接方式。根据点阵屏管脚定义,点阵屏的[9, 14, 8, 12, 1, 7, 2, 5]分别连接开发板的[6,11, 5, 9, 14, 4, 15, 2],点阵屏的[13, 3, 4, 10, 6, 11, 15, 16]分别连接开发板的[10,16, 17, 7, 3, 8, 12, 13]。

这里需要注意,Uno R3开发板的A0~A5也可以做普通GPIO使用,编号分别为14~19。

实验原理图如下图所示:

Arduino基础入门篇21—点阵流动显示
实验原理图

实物连接图如下图所示:

Arduino基础入门篇21—点阵流动显示
实物连接图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

 1/*
2      Roll
3      点阵屏流动显示
4*/

5int  leds[8]  =  {61159144152 };   //点阵屏正极引脚
6int  gnds[8]  =  {1016177381213 };   //点阵屏负极引脚
7
8//字库
9char  test[]  =  {
10    0x000x7C0x8A0x920xA20x7C0x000x00//  -0-
11    0x000x000x420xFE0x020x000x000x00//  -1-
12    0x000x460x8A0x920x920x620x000x00//  -2-
13    0x000x840x820x920xB20xCC0x000x00//  -3-
14    0x000x180x280x480xFE0x080x000x00//  -4-
15    0x000xE40xA20xA20xA20x9C0x000x00//  -5-
16    0x000x3C0x520x920x920x8C0x000x00//  -6-
17    0x000x800x8E0x900xA00xC00x000x00//  -7-
18    0x000x6C0x920x920x920x6C0x000x00//  -8-
19    0x000x620x920x920x940x780x000x00//  -9-
20    0x000x3E0x480x880x480x3E0x000x00//  -A-
21    0x000xFE0x920x920x920x6C0x000x00//  -B-
22    0x000x7C0x820x820x820x440x000x00//  -C-
23    0x000xFE0x820x820x820x7C0x000x00//  -D-
24    0x000xFE0x920x920x920x820x000x00//  -E-
25    0x000xFE0x900x900x900x800x000x00//  -F-
26
27 };
28
29void  setup()  {
30    for  (int  i  =  0;   i  <  8;   i++)
31    {
32        pinMode(leds[i],  OUTPUT);
33        pinMode(gnds[i],  OUTPUT);
34        digitalWrite(gnds[i],  HIGH);   //负极引脚拉高,熄灭所有LED
35    }
36 }
37
38void  ledclean()
39
{
40    for  (int  i  =  0;   i  <  8;   i++)//将点阵屏正极ladies,负极拉高,关断显示
41    {
42        digitalWrite(leds[i],  LOW);
43        digitalWrite(gnds[i],  HIGH);
44    }
45 }
46
47//字符显示
48void  ledShow(char  num,  char  dat)
49
{
50    digitalWrite(gnds[num],  LOW);
51    for  (int  i  =  0;   i  <  8;   i++)
52    {
53        digitalWrite(leds[i],  dat  &   0x80);   //  1  0  0  0  0  0  0  0
54        dat  <<=  1;
55    }
56    delayMicroseconds(100);
57    digitalWrite(gnds[num],  HIGH);
58    ledclean();
59 }
60
61void  loop()  {
62
63    for  (int  a  =  0;   a  <  120;   a++)  //控制流动显示内容
64    {
65        for  (int  i  =  0  ;   i  <  200  ;   i++)//循环显示达到延时效果
66        {
67            for  (int  c  =  0;   c  <  8;   c++)  //8列循环扫描,达到点阵屏驱动效果
68            {
69                ledShow(c,  test[c  +  a]);
70            }
71        }
72    }
73
74 }

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

Arduino基础入门篇21—点阵流动显示
程序下载

4. 程序下载后,点阵屏从右往左流动显示。

Arduino基础入门篇21—点阵流动显示
流动显示

5. 我们对loop()部分的程序进行修改,来改变每次流动的列数。

 1void 

loop() 

{
2
3    for  (int  a  =  0;   a  <  16;   a++)  //控制流动显示内容
4    {
5        for  (int  i  =  0  ;   i  <  200  ;   i++)//循环显示达到延时效果
6        {
7            for  (int  c  =  0;   c  <  8;   c++)  //8列循环扫描,达到点阵屏驱动效果
8            {
9                ledShow(c,  test[c  +  a*8]);
10            }
11        }
12    }
13
14 }

6. 当每次移动8列时,就会整屏覆盖翻页显示,效果如下:

Arduino基础入门篇21—点阵流动显示
翻页显示

3. 实验分析

  1. 程序中定义了一个数组用于存储需要显示的字库,每8个表示一个字符,然后通过ledShow()函数来进行解析显示。使用for循环控制指定的列然后将传入的字符数据进行按位与,取出每一位进行操作。

  2. 在loop()中三重for循环,最里面控制8列扫描显示,中间for循环用于控制显示时间,最外层for循环用于控制流动位置。

  3. 依次移动需要显示的字符数据,就达到了流动显示效果。可以控制每次移动的间距,当每次移动8列就会实现整屏覆盖的效果。


Arduino基础入门篇21—点阵流动显示
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

):Arduino基础入门篇21—点阵流动显示

|

Arduino基础入门篇20—心动点阵

|

    阅读本文大概需要5分钟。

|

本篇继续学习LED点阵屏的使用,实现心型跳动效果。

1. 实验材料

  • Uno R3开发板

  • 配套USB数据线

  • 面包板及配套连接线

  • 8*8点阵屏

2. 实验步骤

1. 根据原理图搭建电路。

根据点阵屏管脚定义,点阵屏的[9, 14, 8, 12, 1, 7, 2, 5]分别连接开发板的[6,11, 5, 9, 14, 4, 15, 2],这8个引脚为LED的正极;

点阵屏的[13, 3, 4, 10, 6, 11, 15, 16]分别连接开发板的[10,16, 17, 7, 3, 8, 12, 13],这8个引脚为LED的负极。

这里需要注意,Uno R3开发板的A0~A5也可以做普通GPIO使用,编号分别为14~19。

实验原理图如下图所示:

Arduino基础入门篇20—心动点阵
实验原理图

实物连接图如下图所示:

Arduino基础入门篇20—心动点阵
实验原理图

2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

 
 1/*
2      Heart
3      点阵屏心型跳动显示
4*/

5int  leds[8]  =  {61159144152 };   //点阵屏正极引脚
6int  gnds[8]  =  {1016177381213 };   //点阵屏负极引脚
7
8//大“心型”的数据
9int  table1[8][8]  =
10{
11    00000000,
12    01100110,
13    11111111,
14    11111111,
15    11111111,
16    01111110,
17    00111100,
18    00011000,
19 };
20
21//小“心型”的数据
22int  table2[8][8]  =
23{
24    00000000,
25    00000000,
26    00100100,
27    01111110,
28    01111110,
29    00111100,
30    00011000,
31    00000000,
32 };
33
34void  setup()  {
35    for  (int  i  =  0;   i  <  8;   i++)
36    {
37        pinMode(leds[i],  OUTPUT);
38        pinMode(gnds[i],  OUTPUT);
39        digitalWrite(gnds[i],  HIGH);   //负极引脚拉高,熄灭所有LED
40    }
41 }
42
43void  ledclean()
44
{
45    for  (int  i  =  0;   i  <  8;   i++)//将点阵屏正极ladies,负极拉高,关断显示
46    {
47        digitalWrite(leds[i],  LOW);
48        digitalWrite(gnds[i],  HIGH);
49    }
50 }
51
52//心型显示函数
53void  ledShow(int  temp[8][8])
54
{
55    for  (int  j  =  0  ;   j  <  8;   j++)
56    {
57        digitalWrite(gnds[j],  LOW);
58        for  (int  i  =  0;   i  <  8;   i++)
59        {
60            digitalWrite(leds[i],  temp[i][j]);
61            delayMicroseconds(100);
62        }
63        digitalWrite(gnds[j],  HIGH);
64        ledclean();
65    }
66 }
67
68void  loop()  {
69
70    for  (int  i  =  0;   i  <  100;   i++)  //利用for循环达到刷新延时的效果
71    {
72        ledShow(table1);
73    }
74    for  (int  i  =  0;   i  <  50;   i++)//利用for循环达到刷新延时的效果
75    {
76        ledShow(table2);
77    }
78
79 }

3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

Arduino基础入门篇20—心动点阵
程序下载

3. 实验现象

点阵屏上心型在不断跳动。

Arduino基础入门篇20—心动点阵
实验现象

4. 实验分析

程序中定义了两个二维数组,分别用来存储两个不同大小的心型显示数据,在显示函数中通过两个for循环来遍历数组。在loop()中没有使用 delay()函数来做延时处理,因为与数码管类似,这种LED显示设备需要不断刷新, delay()函数使程序暂停等待延时会造成显示闪烁甚至熄灭的情况。使用for循环来控制显示的次数,进而控制显示时间来达到延时效果。

Arduino基础入门篇20—心动点阵
扫码加入微信公众号:TonyCode


原文始发于微信公众号(

TonyCode

):Arduino基础入门篇20—心动点阵

|