Vous êtes sur la page 1sur 194

TECNOLOGIA EM AÇÃO ™

Conteúdo:
Sobre o autor
xv
Sobre o Revisor Técnico
xvii
Agradecimentos
xix
Introdução
xxi
■ Capítulo 1: Apresentando o Raspberry Pi
1
■ Capítulo 2: Linux pelo assento de suas calças
15
■ Capítulo 3: Apresentando Python
31
■ CAPÍTULO 4: Eletrônica a 100 MPH
51
■ Capítulo 5: O Web Bot
67
■ Capítulo 6: A estação meteorológica
81
■ Capítulo 7: O Media Server
101
■ Capítulo 8: O sistema de segurança Home
111
■ Capítulo 9: The Toy Cat
127
■ Capítulo 10: O Avião Rádio-Controlado
145
■ Capítulo 11: The Weather Balloon
161
■ Capítulo 12: O submersível
173
■ Capítulo 13: A Gertboard
201
■ Capítulo 14: O Raspberry Pi e o Arduino
215
Índice
227
v
Introdução
Em 2006, quando Eben Upton e os outros fundadores da Fundação Raspberry Pi olhou para o estado de Computador
Programas de Ciência (CS) nas universidades ficaram pasmados. Programas de ciência da computação estavam sendo reduzida
para
"CS 101: como operar Microsoft Word" e "CS 203:. Otimizar sua página do Facebook" Ninguém, eles perceberam, era
Aprender a programar mais nada, muito menos antes de entrar na faculdade. Então, eles arquitetaram um plano de criar um
pequeno,
Computador barato que as crianças poderiam aprender a programar em, como o Amigas, Espectros, e Commodore 64s do
passado.
Ao colocar um processador ARM em uma placa, deu-lhe (eventualmente) 512 MB de RAM e uma GPU VideoCore, e permitiu
os usuários a interagir com ele usando um teclado USB, mouse e uma porta de saída HDMI. Para torná-lo fácil de programar, eles
o projetou para que a sua linguagem de programação principal fosse um Python-poderoso, linguagem de script fácil de aprender.
E, assim, o Raspberry Pi nasceu.
Eu escrevi o meu primeiro programa em BASIC em um Commodore VIC 20, há muitos anos. Às 5 KB de RAM, tinha
menos poder de computação do que muitos dos micro controladores de hoje, mas eu ainda era capaz de escrever um jogo de
labirinto simples sobre ele,
salvar meu progresso como eu, foi em uma unidade de fita-cassete. Nos anos seguintes, eu tenho percorrido meu caminho através
da diferente
plataformas de computação, a partir do Windows 3.1, para Macintosh OS 8, para um pouco de Linux. Tinha sido um longo tempo
desde que eu era
realmente animado por um computador; o Pi foi uma lufada de ar fresco em um ambiente de computação um pouco obsoleto. Não
somente
foi pequeno e barato, mas era fácil obtê-lo para interagir com o mundo, um benefício real físico para qualquer pessoa interessada
na concepção de sistemas físicos. Então, quando eu ouvi sobre o seu lançamento, me inscrevi como cerca de um trilhão de outros
amadores /
hackers / engenheiros e esperou impacientemente para a mina para ser entregue. Então eu comecei a construir coisas com ele e
nunca
Olhou para trás.
Se você comprou um Pi, mas não sabe como começar com ele, este livro é para você.
Se você comprou um Pi, mas não sabe o que fazer com ele, este livro é para você.
Se você está considerando a compra de um Pi, mas ainda não, porque você continua pensando: "Por que eu deveria? Não é como
se eu posso fazer
qualquer coisa legal com ele, certo? "", então este livro é definitivamente para você.
Esse livro não pretende ser um livro sobre Python, nem é uma exploração exaustiva do Raspberry Pi e
tudo o que pode fazer. Mas que se destina a ser um divertimento, ficando como guia este pequeno computador limpo. Espero que
depois de você
trabalhar o seu caminho através do livro, você vai ter um sentido de todas as coisas que são possíveis com o Pi quando você
combiná-lo
com um pouco de engenhosidade e criatividade de sua parte.
Se você quiser trabalhar com os projetos aqui no fim, sinta-se livre. Se você preferir pular, fazendo aqueles que
interessá-lo, você está convidado a fazer isso também. Ao longo do caminho, espero que você vai desenvolver uma familiaridade
tanto com Python
e o Pi que lhe permitirá continuar, a construção de projetos que você vá, e talvez inspirar os outros ao longo do caminho.
Acima de tudo, espero que você goste do livro e seus projetos. Foi realmente uma explosão de escrever.
Computação feliz!
xxi
Capítulo 1
Apresentando o Raspberry Pi
Então, você tem-se um mini computador Raspberry Pi. O que agora? Talvez você esteja familiarizado com o Pi e sua
arquitetura, mas você está se perguntando o que fazer com ele. Talvez você tenha alguma experiência com computadores, mas
não são
familiarizado com Linux ou Raspbian, sistema operacional padrão do Pi. Talvez você já é um geek Linux, mas você
não sabe como programar em Python e pensei que seria uma boa hora para aprender. Talvez você não tem absolutamente
nenhuma
experiência com computadores, além de clicar no botão Iniciar, verificar o seu e-mail e navegar na web, mas você ouviu
sobre este thingamabob "Raspberry Pie" e decidiu ver o que todo o tumulto era sobre.
Seja qual for o caso, bem-vindo! Você está prestes a participar de um clube não particularmente exclusivo, estou com medo,
uma vez que tudo o que preciso para participar é de cerca de US $ 35 mais o transporte, mas um clube, no entanto. Como
membro, você será capaz de discutir
gerenciadores de pacotes, processadores ARM11 e arquivos de configuração de ponto de forma inteligente com quem quiserem
ouvir. Você vai saber sobre
drivers e APIs. Você vai se familiarizar com servos, LEDs e câmaras-on-a-chip. E, talvez o mais importante,
você vai ser capaz de se conectar ao seu novo mini-computador, programá-la em uma das muitas linguagens de programação
diferentes
(embora este livro trata exclusivamente com Python), construir projetos e interagir esses projetos com a Pi, permitindo-lhe
interagir com o mundo físico e fazer algumas coisas muito legais.
Com este livro, tenho a honra de induzir você a este clube. Sua experiência não importa, porque eu vou levá-lo passo
a passo através do processo de criação de seu Pi para que você possa trabalhar com ele com um mínimo de dores de cabeça. Vou
tentar
para dar-lhe uma sólida formação em Linux para que você entenda o que está acontecendo nos bastidores, e eu vou dedicar
um longo capítulo sobre a apresentá-lo para Python, a linguagem de script que todos os geeks da moda são scripts em.
Google usá-lo, a NASA usa-o, e o Livro de Faces utiliza. Vamos enfrentá-lo, Perl é tão ontem. Além disso, vou dedicar um
capítulo
introduzindo-lhe as porcas e parafusos de construir projetos de algo eletrônicos muitos técnica e de programação
livros querem encobrir ou negligência completamente. Existem fatores de segurança a considerar (eu quase tive uma pequena
explosão
(quando eu curtocircuitar uma bateria, por exemplo), bem como uma boa prática edifício. Por exemplo, você vai aprender a
fazer uma boa solda e como evitar cortar o seu dedo indicador off com um estilete, bem como a diferença
entre 40 W e uma 40K W resistor.
Claro, se você já está familiarizado com todas essas coisas, sinta-se livre para pular para as coisas boas: os projetos.
Todos eles podem ser construídos em um fim de semana ou assim (ou um mês ou dois, dependendo do seu nível de motivação e
comprimento
(da sua lista de afazeres), e todos são programados em Python. Vou dar-lhe uma lista de compras de peças no início de cada
projeto, com lugares para obter as peças, e depois vamos mergulhar na direita. Eles não necessariamente dependem uns dos
outros, nem são
eles em qualquer ordem particular de complexidade; se você quiser construir o Entertainer Cat e pular o Home Media Server,
é perfeitamente bem.
Que tipo de projetos que você pode fazer com um Pi? Você ficaria surpreso: o pequeno tamanho do Pi desmente a sua
computação impressionante
poder. Ela tem sido usada para tudo, desde servidores web para computadores de automóveis (carputers) para cluster de
computação, quando
ligado em grandes grupos. Espero que depois de terminar este livro você terá não apenas mais algumas idéias, mas as habilidades
necessário colocar essas idéias em prática.
Seja qual for seu motivo para pegar este livro, o seu principal objetivo deve ser o de se divertir e aprender alguma coisa!
Eu vou fazer o que posso para mostrar o caminho.

Capítulo 1 ■ Apresentando o Raspberry Pi


A História do Raspberry Pi
Pode parecer para o observador casual que o Raspberry Pi é muito novo; muitos posts de blog ainda tratá-lo dessa maneira, e não

uma surpreendentemente grande número de pessoas que não têm idéia do que é. Um bom número de artigos on-line ainda
começar com
algo ao longo das linhas de, "The Raspberry Pi é, um computador pequeno crédito do tamanho de um cartão que amadores
começaram
usando para. . . "". Isto está em contraste gritante com, digamos, o Arduino; a maioria das pessoas para cima em eventos atuais
têm pelo menos ouviu falar de
o Arduino, mesmo se eles não têm idéia do que é ou o que é usado para, porque ele tem sido em torno desde 2005 e tem
ganhou um faça você mesmo em todo o mundo leal e vocal-seguidores entre amadores, totós, e.
O Arduino
Para aqueles que não sabem, o Arduino é uma plataforma de micro controladores, montados em uma placa que se
conecta facilmente em
a maioria dos computadores. Ele permite ao usuário programar a bordo Atmega chip para fazer várias coisas usando
um C-like
linguagem de programação, em programas chamado esboços. Um esboço típico Arduino pode ter esta aparência:
#include <Servo.h>
void setup ()
{
myservo.attach (9)
}
void loop ()
{
myservo.write (95);
atraso (100);
myservo.write (150);
atraso (100);
}
Este repetidamente move um servo-motor conectado (um pequeno motor que pode ser controlada com precisão
através de software) de volta
e para trás, com atrasos de um segundo.
Apesar de não ser tão poderoso como o Pi, o Arduino tem feito muito para fazer projetos eletrônicos em geral
(e micro controladores especificamente) mais acessíveis ao público em geral. Eu falo sobre como o Arduino e o
Raspberry Pi complementam-se bem no capítulo 14.
O Raspberry Pi, enquanto não novo, tem sido em torno de alguns anos. Seus criadores Eben Upton-, Rob Mullins,
Jack Lang, e Alan Mycroft-primeiro lançou a idéia de um PC barato em 2006. Com base na Universidade de Cambridge em
o Reino Unido, eles estavam preocupados que o desaparecimento de computadores pessoais baratos, como o Commodore 64,
Amiga, e a Spectrum foram afetar negativamente a capacidade dos jovens para programa. Com desktop e laptop
computadores que custam centenas, se não milhares, de dólares, crianças e adolescentes foram proibidos de praticar
programação na máquina principal da família.
Ao mesmo tempo, os criadores perceberam que muitos universitários de ciência da computação currículos tinha sido reduzida a
"Microsoft Word 101" e "Como criar uma página web." Os quatro criadores pretendia elevar o conhecimento de programação
barra de novos estudantes, e assim, talvez, ciência da computação e engenharia cursos se tornaria um pouco mais robusto.
Obviamente, um computador mais barato era necessário. Eles brinquei com micro controladores e várias fichas,
breadboards e PCBs, mas não foi até 2008 que a idéia tornou-se mais viável. Chips foram se tornando menores,
mais baratos e mais poderosos graças à explosão de dispositivos móveis. Esses chips lhes permitiu planejar um dispositivo que
seria capaz de suportar multimídia, não apenas programação de linha de comando, o que eles sentiam que era importante.
(Ver Figura 1-1.) Os jovens eram mais propensos a estar interessado em um dispositivo de mídia com capacidade, e, portanto,
mais propensos a tentar
programação em um.

Capítulo 1 ■ Apresentando o Raspberry Pi


Figura 1-1. 2006 Raspberry Pi protótipo (imagem © Raspberry Pi Foundation) de Eben Upton
Em 2008, os quatro criadores originais, juntamente com Pete Lomas e David Braben, formaram a Fundação Raspberry Pi
(a Fundação), e três anos mais tarde, o Pi foi produzido em massa primeiro saiu da linha de montagem.
■ Observação O nome Raspberry Pi é um aceno para o número de microcomputadores em homenagem a fruta nos
primeiros dias, como
Apple e Tangerina, e a Pi vem da linguagem de script Python.
Dentro de um ano, a Fundação tinha vendido mais de um milhão de unidades. Os membros fundadores já disse muitas vezes
que eles estavam espantados com o interesse explosivo em seu dispositivo. Sua meta original de colocar um barato,
dispositivo programável nas mãos de educadores e alunos se concretizou. No entanto, tornou-se
muito mais do que isso. Aparentemente, eles não eram os únicos que estavam faltando a capacidade de programar em um mais
barato
máquina; amadores de todo o mundo inundado element14, Premier Farnell, e RS-Eletrônica com ordens para o
ponto que as pessoas que pré-ordenada a sua Pi (tal como o seu verdadeiro) teve de esperar até seis meses para o fornecimento de
apanhar
com a demanda. Muitos clientes podem ter sido programadores atuais ou antigos, ansioso para jogar com um novo, pequeno,
computador poderoso. (Eu aprendi a programar em BASIC sobre o Commodore VIC-20, com um impressionante de 20 KB
Em RAM. . . assim, há muito tempo atrás.)
Mas não eram (e são) um número infinito de outros usos para a Pi, como se diz no Raspberry Pi Foundation de
Quem somos página:
Nós tivemos interesse enorme, apoio e ajuda da comunidade educativa, e temos sido
encantados e um pouco humilhado pelo número de consultas de agências e pessoas distantes
de nossas metas originais para o dispositivo. Os países em desenvolvimento estão interessados no Raspberry Pi
como dispositivos de produtividade em áreas que simplesmente não podem arcar com o poder e hardware necessários para
executar
um PC desktop tradicional; hospitais e museus nos contataram para saber sobre como usar o
Raspberry Pi para conduzir dispositivos de exibição. Os pais de crianças com deficiências graves têm falou-nos sobre
aplicações de monitoramento e acessibilidade; e parece haver um milhão e uma pessoas lá fora
com ferros de solda quente que querem fazer um robô.
3

Capítulo 1 ■ Apresentando o Raspberry Pi


Felizmente, a oferta foi capturado de forma segura a demanda. Não há período de espera para comprar um Pi mais, e há
não um limite de um por cliente. Existe um programa de "comprar um um give" nos trabalhos, em que o Raspberry Pi
Fundação pretende doar um Pi para uma organização educacional para cada Pi vendido. O recente lançamento do Raspberry
Placa da câmera Pi, uma pequena câmera-on-a-chip que se conecta diretamente ao Pi e permite ao usuário tirar ambos ainda
fotos e vídeo, promete abrir ainda mais possibilidades para este pequeno computador. E desde que os fundadores
incentivar activamente outras empresas de copiar seu paradigma, é de ninguém adivinhar o que virá a seguir.
Explorando o Conselho Pi
Então, o que exatamente está no conselho? É muito danado pequena, então o que pode possivelmente caber lá?
Existem dois modelos de Pi: o modelo A e modelo B. (Veja a Figura 1-2 para uma olhada no modelo B.) Os dois são muito
semelhante, com o modelo B ter mais algumas funcionalidades (e um preço ligeiramente superior) do que modelo A. Um modelo
tem 256 MB de
RAM; modelo B tem 512 MB. A modelo tem uma porta USB, enquanto o modelo B tem dois. Finalmente, o modelo A não tem
porta Ethernet,
enquanto o B tem um. Você ainda pode encomendar um ou outro; Um modelo é de US $ 25 US como esta escrito, enquanto o
modelo B é de US $ 35 US.
Para a pequena diferença de preço, eu sugiro modelo B. A diferença entre uma e duas portas USB pode ser
enorme, e a capacidade para ligar a um cabo Ethernet com fio pode fazer coisas como atualizações e conexão com a
placa em uma pequena, a rede ad-hoc muito mais simples.
Figura 1-2. O Raspberry Pi Modelo B (imagem © Raspberry Pi Foundation)
O Pi (de agora em diante, vamos supor que você tem o modelo B) mede 85,6 milímetros (mm) de 56 mm por 21 mm
(sim, ele é, obviamente, não fez na América), com alguma sobreposição para as portas e o cartão SD. Fazendo referência à Figura
1-2 e
movimento anti-horário em torno do cartão, eu vou explicar os componentes em detalhes nas seções a seguir.
4
Capítulo 1 ■ Apresentando o Raspberry Pi

O cartão SD
Como você pode ver na Figura 1-2, um lote é embalado em um pequeno espaço do cartão. Uma das maiores características de
economia de espaço do Pi
é que não há nenhuma unidade de disco rígido real como em seu desktop ou laptop; o cartão SD funciona como uma unidade de
estado sólido (SSD). Você pode
alterar o tamanho da unidade que apenas trocando cartões SD, dentro da razão. Você deve usar pelo menos um cartão de 2 GB, e
em
menos 4 GB é recomendado se você quiser adicionar nenhum software real para sua imagem de unidade. (Você faz.) Cards até 32
GB tem
testado e trabalho, mas eles não são garantidos, tenha certeza que você backup de sua unidade, muitas vezes, se você decidir ir
com um
cartão bazillion-GB.

A porta de alimentação
A porta de alimentação é apenas uma entrada micro-USB de 5V, similar ao que você vê com muitos telefones celulares ou tablets.
Como uma matéria
de fato, um carregador de telefone celular é uma das maneiras mais comuns para alimentar o Pi. (Ver Figura 1-3.)
Figura 1-3. Adaptador de energia USB comum
Uma palavra de advertência, porém: O Raspberry Pi não tem regulador de energia a bordo! Se você está acostumado a usar o
Arduino, você sabe que você pode ligá-lo com segurança até 9V e ir a sua maneira alegre. Se você tentar isso com o Pi,
você vai ter mesmo um bom peso de papel. Não vá acima 5V- se você não tiver certeza de que o seu carregador põe para fora,
medi-la
com um multímetro. Melhor ainda, todos os sites que vendem o Pi também vendem uma variedade de carregadores garantidos
para trabalhar com ele. Eu?
Eu uso o carregador antigo que veio com meu Blackberry Torch. (Sim, eu era dono de um Blackberry. Não me julgue.)
Em caso você estava pensando em pedir: Sim, você pode alimentar o Pi com baterias, embora desempenho pode obter funky
em que desempenhem e níveis de energia cair abaixo de 5V. Provavelmente a maneira mais fácil de fazer isso é usar uma bateria
de 9V ou um banco de
4 pilhas AA e limitá-lo através de um regulador de tensão, ou usar uma bateria, como os encontrados em Controle Remoto
carros. Vou discutir isso também nos capítulo em que o projeto envolve uma Pi móvel.

A porta HDMI
O Pi é equipado com um cabo HDMI (High Definition Multimedia Interface) porta de saída, e muitos argumentam que esta é
verdadeiramente
onde o Pi entrar em seu próprio, porque é capaz de 1080p saída de alta definição de gráficos, com um gigapixel / segundo
Poder de processamento. A GPU onboard pode fazer a reprodução qualidade Blu-ray, usando bibliotecas OpenGL e OpenVG
fornecidas
on-chip.

Capítulo 1 ■ Apresentando o Raspberry Pi


As portas Ethernet e USB
As portas Ethernet e USB (na placa de modelo B, pelo menos) são ambos fornecidos via o chip LAN9512 a bordo.
De acordo com a folha de dados de 9512, é um hub de alta velocidade USB 2.0 com um controlador Ethernet 10/100. Este
pequeno chip é
apenas 8 mm para um lado, mas é capaz de velocidades de 480 Mbps USB 2.0 e totalmente integrada 10BASE-T e 100-BaseTX
Suporte Ethernet. Eu sei que esta descrição é um monte de jargão técnico, mas o que isso significa é que quase qualquer coisa
você pode se conectar em um computador de mesa pode ser conectado ao seu Pi, a partir do seu roteador para uma webcam para
um hub USB para uma
disco rígido externo (HDD).
O áudio e vídeo RCA Jacks
Tomadas de vídeo e de áudio RCA também estão no tabuleiro. O Pi suporta som pela sua saída HDMI, mas você deve
quer conectar fones de ouvido, tem uma de 3,5 mm de áudio padrão. Se você quiser usar um microfone, mais USB
mics vai funcionar, assumindo que eles são compatíveis com Linux. Como para o vídeo: o Pi não suporta saída VGA, mas a RCA
envia vídeo para qualquer dispositivo de vídeo RCA conectado útil se você tiver um par de óculos de vídeo independentes, como
o
Myvu dispositivo.

Os pinos GPIO
Talvez a parte mais negligenciada do Pi são os GPIO (Saída Geral Purpose Input) pinos. Estes pinos permitem que você
conecte o Pi para qualquer número de extensões físicas, de LEDs e servomotores para controladores de motor e extensão
placas como a grande Gertboard, que será apresentado e discutido no Capítulo 13. Com uma área de trabalho normal,
ou computador portátil, isso exigiria algum mexer sério, seja com drivers USB ou acessando o (talvez
inexistente) porta serial e fazer algumas graves magia programação de baixo nível. Mas o Raspberry Pi vem com
bibliotecas pré-instalados que permitem acessar os pinos usando Python, C ou C ++. Bibliotecas adicionais também existe se você
Acontece que não gosto das versões oficiais, pré-carregadas. Isso significa que você pode conectar até oito servos para a direita Pi
fora da caixa-suficiente para controlar um robô quadrúpedes, por exemplo.
O Sistema em um Chip
A peça mais importante no tabuleiro é o chip no meio, também referido como um SoC, ou Sistema em um Chip.
O chip do Pi é um PCM2835 Broadcom com um processador ARM11 rodando a 700 MHz e uma GPU Videocore4. O chip
pode ser OverClocked para, pelo menos, 800 MHz sem um problema; na verdade, a última geração de cartões SD pré-carregados
oferecer
uma opção overclocking direito do arquivo Raspi-config. O mais rápido das predefinições terá o seu processador de até 1 GHz,
com um on-demand função disponível para impedir que o seu chip de superaquecimento. Segundo a Fundação, o resultado
de tudo o que overclocking é igual a 52-64 por cento mais rápido operações.
■ Nota Para mais informações sobre overclocking, consulte o artigo "Introdução ao modo turbo: até 50 por cento
mais desempenho
de graça "no http://www.raspberrypi.org/archives/2008.
O que tudo isto significa é que o poder de computação do Pi torna mais ou menos igual a um Pentium 300 MHz-2, mas com o
recursos gráficos de uma Xbox de primeira geração. Nada mau para um sistema sobre o tamanho de um cartão de crédito que
custa menos de
US $ 50 US. Isso também significa que porque o Pi é tanto pequeno e poderoso, ele pode ir a lugares e fazer coisas que
anteriormente
apenas laptops se atreveu a ir e fazer.

Capítulo 1 ■ Apresentando o Raspberry Pi


Comparando Raspberry Pi para dispositivos semelhantes
E o que, você pode perguntar, faz com que o Raspberry Pi melhor do que outros pequenos microcomputadores como o Arduino e
o
BeagleBoard linha de dispositivos? A resposta para isso é que o Pi não é necessariamente melhor; cada um destes dispositivos de
uma enche
nomeadamente nicho, e pode ser difícil para compará-los. Arduinos são impressionantes para a criação de projetos simples, e até
mesmo
controlar um robô muito simples. Em muitos casos, usando um Pi de fazer o que você pode fazer com um Arduino seria um
exagero,
pura e simples. Como para os outros computadores como o BeagleBoard, a principal diferença é o preço. Um parente próximo
para
o Pi é o Beaglebone, mas do fabricante do osso preço de varejo sugerido (MSRP) é de US $ 89 mais do que o dobro do
Preço do Pi. E adquirir o Raspberry Pi significa que você está apoiando uma organização de caridade com o objetivo de colocar
barato
computadores nas mãos de crianças em idade escolar em todo o mundo, por isso há que, também.
Eu acho que você concordaria que agora é um momento tão bom quanto qualquer outro para tomar o Pi fora de sua caixa, se você
não tiver já. Apenas leia
antes de iniciar-se.

Requisitos de hardware do Pi
Vamos dar uma olhada rápida no que os requisitos do Pi são, e então vamos iniciá-lo.
Ligar a alimentação
Eu já mencionei poder; o Pi precisa 5V-nem mais, nem menos. Mais uma vez, porque vale a pena repetir: O Pi não tem
onboard regulador de tensão! Você não pode conectar uma verruga bateria de 9V ou parede e esperar que ele funcione. Ou usar
algo como
um carregador de telefone celular que põe para fora 5V (a maioria deles fazem), ou ter uma boa fonte de alimentação de uma loja
de eletrônicos on-line
ou a partir do local onde você comprou o Pi. A fonte de alimentação também precisará fornecer pelo menos 500 miliampéres
(mA), e
de preferência mais como amp 1 (A). Se fontes apenas a 500 mA, estar preparado para algum comportamento funky, como o
mouse,
teclado não funciona quando o adaptador sem fio está ligado. Eu recomendo 1A.
Adição de um monitor
A próxima periférica você vai precisar de, pelo menos à primeira vista, é um monitor com HDMI ou DVI capacidades. Se tudo
que você tem
é a entrada DVI, que está tudo bem, porque HDMI para DVI conversores estão em toda parte. Depois você tem que configurar e
todo o
software necessário é instalado, você pode executar o Pi em um decapitado configuração. O que isto significa é que você pode
entrar em
a partir de outro computador ou com SSH (Secure Shell) ou mesmo um cliente (Virtual Network Computing) VNC. Mas pelo
em primeiro lugar, você precisará de um monitor de modo que você possa ver o que está fazendo. Passos de bebê.
Adicionando um Hub USB
Você provavelmente vai querer um hub USB em algum ponto. Modelo B tem duas portas USB, o que significa que você pode
conectar um
teclado e um mouse, e você estará sentando-se consideravelmente. No entanto, se você quer ir sem fio (e em algum momento
você vai,
confie em mim), você vai precisar de pelo menos três portas USB, uma das quais é para o seu dongle USB sem fio. Que significa
você vai precisar de um hub.
O desempenho pode ficar pegajoso quando você adiciona um hub, porque alguns hubs USB foram mostrados para trabalhar muito
melhor do que
os outros quando se trata de trabalhar em conjunto com o Pi. Talvez o aspecto mais importante é necessário que o cubo está
acionadas externamente; isso vai evitar que o seu Pi de ter que tentar fornecer energia suficiente para o que quer que o poder de
sucção-
dispositivo que você decidiu ligar naquele dia. Este é um problema que vai vir para cima com o adaptador USB wireless. (Veja a
seção "Usando um dongle USB sem fio"). Em todo caso, se você não tiver certeza se o seu hub é compatível e não têm
um hub de reposição flutuando ao redor da casa para tentar, o melhor lugar para pesquisar o assunto é muitas vezes nos fóruns
Raspberry Pi
(Http://www.raspberrypi.org/phpBB3). É aqui que os usuários gostam de ter tentado umpteen marcas diferentes e relataram

Capítulo 1 ■ Apresentando o Raspberry Pi


volta sobre quais as que funcionam, quais não, e quais os que requerem um pouco de ajustes. Felizmente, os hubs são
relativamente
barato. Se o que você tente primeiro não parece funcionar, há uma boa chance de você encontrar outro uso para ele em algum
lugar.
O que eu uso é um Belkin F5U407 4 portas Ultra Mini Hub (mostrado na Figura 1-4).
Figura 1-4. O hub USB Belkin F5U407
No entanto, aqui é onde você deve fazer o que eu digo, não como eu faço, pois se verifica que o meu hub particular é não
acionadas externamente. Eu comprei um presente, porque ele era pequeno e em forma na minha caixa de peças do robô. Se o
tamanho é um problema para você,
este hub em particular pode ser um bom ajuste para você. Quando isso acontece, eu não tive nenhum problema executando tudo o
que preciso com
lo, então se sinta livre para copiar o meu sucesso com ele.
Usando um dongle USB sem fio
A última peça de hardware que você vai precisar é um dongle USB sem fio. Quando você está definindo-se primeiro o Pi, é
quase sempre uma boa idéia para mantê-lo com fio para sua conexão de Internet o maior tempo possível. Isto porque um disco
conexão é sempre mais rápido do que um WiFi um, e você provavelmente vai ser download de pacotes, atualizações e bibliotecas
de todos
os tipos de coisas boas. Na verdade, se você planeja usar o mesmo Pi para vários projetos diferentes (que é definitivamente uma
opção,
mesmo que eles são tão barato), você provavelmente vai ligá-lo novamente para cada download sucessivo que você precisa. Ele
vai economizar
muito tempo.
Mas, eventualmente, você vai querer ou precisar ir sem fio; afinal de contas, parte do fascínio do Pi é o seu tamanho compacto e
portabilidade,
que é desperdiçado se ele está arrastando um cabo Ethernet por trás dele como uma bola e uma corrente. Então, você precisará de
um adaptador sem fio.
E isso, meus amigos, é onde a configuração de seu Pi pode ficar muito pegajosa. Suporte WiFi em ARM Linux pode ser
"Irregular", como a Fundação tão coloca eloqüentemente; sem algum tipo de direção, você pode passar meses e
centenas de dólares experimentar diferentes dongles, todos sem sucesso. Alguns adaptadores pode fazer o travamento do Pi,
outros não
conectar a uma rede. Pode não fonte de energia suficiente através de suas portas USB onboard para alimentar alguns adaptadores,
mas
muitas vezes tem problemas usando um adaptador USB que é conectado através de um hub. (Por este motivo, se nenhum outro, é
sempre uma boa idéia
para conectar o adaptador sem fio em uma das portas a bordo do Pi e conecte o hub para o outro. Em seguida, o mouse e
Teclado estão conectados através do cubo, em vez de o dongle).
Felizmente, a comunidade tem Pi (coletivamente) passou aquelas centenas de dólares e meses testando todos
esses adaptadores, e publicou os resultados nos fóruns. Acontece que o Pi joga bem com adaptadores usando
o chipset Ralink RTL8188CUS.

Capítulo 1 ■ Apresentando o Raspberry Pi


Infelizmente, você pode ter notado que determinar qual chipset um determinado adaptador utiliza não é tarefa fácil, mesmo se
você está na loja, inspecionar fisicamente sua embalagem (falado por experiência própria). Por alguma razão, USB sem fio
chipsets do adaptador não são comumente anunciados. Mas, novamente, a comunidade Pi tem experimentado e determinou que
as duas seguintes adaptadores funcionam muito bem com o Pi:
• Edimax EW-7811Un
• RT5370 Ralink
Ambos estão disponíveis na Amazon.com por preços muito razoáveis (menos de US $ 10 dos EUA).
Como você pode ver na Figura 1-5, o adaptador Edimax é pequeno; é tão pequeno, de fato, que é realmente muito fácil de perder.
(Não que eu iria perder o controle de um adaptador sem fio. Mas você pode.)
Figura 1-5. Um adaptador Edimax
Se você comprou o seu adaptador e ter uma fonte de alimentação, hub, monitor, mouse, teclado e trabalhando, você é
pronto para começar a configurar seu Pi.

O sistema operacional Pi
Sistema operacional padrão do Raspberry Pi (OS) -o um é projetado para usar-se Linux. Se você não estiver familiarizado com
o sistema operacional Linux, não se preocupe: nós espiada sob o capô no Capítulo 2. Por enquanto, porém, sabe que o Linux
vem em vários sabores, ou distribuições: Ubuntu (um dos mais populares), Debian, Mint, Red Hat, Fedora, e alguns
outras, as variedades mais obscuros. O Pi usa uma versão do Debian chamado, apropriadamente, Raspbian.
Porque o Pi não tem um disco rígido, você deve baixar e copiar uma imagem de disco para um cartão SD. Essa imagem é
o que o Pi vai usar para arrancar, e que também irá agir como uma memória / RAM. Quase qualquer tamanho vai fazer, contanto
que ele é, pelo menos, 2 GB,
e mais de 4 GB é o preferido, se você planeja carregar qualquer quantidade apreciável de software extra para o cartão.
(Você faz.) Como mencionado anteriormente, cartões de até 32 GB foram testados; além disso, os resultados podem ser tipo de
esboçado.
É recomendado que você utilize um cartão de marca, e que deveria ser uma classe 4, que indica a velocidade do cartão.
Capítulo 1 ■ Apresentando o Raspberry Pi

Formatar o Cartão
Sua primeira tarefa é para formatar o cartão para que a sua Pi pode lê-lo. Insira o cartão SD no seu computador e fazer
Os seguintes:
• Para usuários do Windows: Faça o download do programa de formatação ferramenta da SD Association em
https://www.sdcard.org/downloads/formatter_4/eula_windows/. Instale-o, usando toda a
configurações padrão, e iniciá-lo. Defina a opção de "ajuste de tamanho FORMATO" para "ON" no
menu de opções de ferramenta, certifique-se de ter o cartão SD direita selecionado e clique em "Format".
• Para usuários de Mac: Baixe a versão Mac do ferramenta de formatação de
https://www.sdcard.org/downloads/formatter_4/eula_mac/. Instale a ferramenta com toda a default
configurações clicando duas vezes no arquivo baixado. .pkg Uma vez instalado, abra-o e selecione a
Opção "Format Overwrite". Certifique-se de ter o cartão SD direita selecionado e clique em "Format".
Usando NOOBS
Agora que o cartão é formatado corretamente, você pode colocar o sistema operacional nele. A maioria dos usuários pode usar o
Pi
NOOBS da Fundação (New Out Of Box Software) a partir http://www.raspberrypi.org/downloads. Os NOOBS
sistema, no primeiro arranque, na verdade, irá apresentar-lhe uma escolha de sistemas operacionais para instalar, incluindo duas
versões
de XBMC (Xbox Media Center), Pidora, e Raspbian. Para os propósitos deste livro e os capítulo subsequentes,
vamos instalar Raspbian.
Uma vez que você tenha baixado NOOBS-e estar ciente de que é uma bolada de 1,1 GB baixar descompactá-lo usando a extração
utilitário de sua escolha (Windows: clique com botão direito, "Extrair tudo"; Mac: clique duas vezes). Em seguida, copie os
arquivos extraídos para o seu
Cartão SD.
É isso aí. Seu Pi está agora pronto para arrancar.

Ligação dos periféricos


Pronto para conectar todos esses componentes maravilhosas? Não tão rápido, Kemo Sabe. Há uma ordem preferencial para
conectar
os periféricos. Pode parecer estranho, mas é possível (mesmo que altamente improvável) que o poder, o monitor, conexão e
as outras partes na ordem errada pode causar um pico de tensão e fritar sua placa. Então, se acostumar a ligar as coisas
nesta ordem, e salve-se potenciais dores de cabeça para baixo da linha. A ordem é a seguinte:
1.
Insira o cartão SD.
2.
Ligue o monitor.
3.
Ligue os periféricos USB (teclado, mouse e / ou hub).
4.
Conecte o cabo Ethernet.
5.
Ligue a fonte.
Por uma questão de fato, o detalhe mais importante para lembrar aqui é para ligar o poder última. Provavelmente, você pode
falsificar
sobre os outros, mas alimentação deverá estar sempre por último.
Não há nenhuma chave liga / desliga; assim que você conecta o poder, LEDs deve começar a acender um cigarro, e você deve ver
uma
tela do arco-íris em seu monitor.

Capítulo 1 ■ Apresentando o Raspberry Pi


Configurando o Pi
Quando você iniciar o Pi pela primeira vez com o cartão NOOBS, você verá uma caixa de seleção com seis opções: Archlinux,
OpenELEC, Pidora, RISC OS, RaspBMC, e Raspbian. Selecione Raspbian com o mouse e clique em "Install OS"
botão no canto superior esquerdo da janela. Clique em "Sim" para confirmar na caixa de pop-up que se segue, e em seguida,
aguarde enquanto o
imagem está escrito no seu cartão SD. Pode valer a pena assistir, porque a janela de progresso tem algumas dicas que você pode
ler
enquanto você espera.
Quando ele é feito, clique em "OK" e o Pi irá reiniciar a um encrã a preto e linhas rastejando de texto. Quando terminar,
você será saudado com a Ferramenta de Configuração de Software (Raspi-config). Isso dá a você algumas opções adicionais,
tais como a expansão do sistema de arquivos (sempre uma boa idéia), mudando a senha do usuário, e até mesmo overclocking.
Selecionar
Independentemente da opção que você gostaria de mudar com as teclas de setas e pressione Tab e depois Enter para atirar a sua
escolha.
Definitivamente permitir que a câmara porque você vai usá-lo mais tarde. Overclocking é bom, mas estar ciente de que pode
encurtar o seu
A vida de Pi. O menu Raspi-config permite-lhe fazer overclock até 1 GHz, mas se você quiser jogar pelo seguro e estável,
não ir mais alto do que 900 MHz.
As opções avançadas incluem a definição de um nome de host e memória divisão. Jogar com estes como você gosta, mas
definitivamente
permitir o acesso SSH porque vamos usar isso mais tarde também. Lembre-se, nesta fase, você não pode realmente danificar
qualquer coisa. Se você tijolo seu cartão (inutilizá-lo), basta usar a ferramenta SDCard reformatá-lo e copiá-lo para NOOBS
mais uma vez. Então você pode começar de novo. Mais tarde, você pode querer ter mais cuidado, mas eu vou lhe mostrar como
fazer backup de seu cartão de modo
que você não perder nenhuma das suas configurações se você fizer algo tolo.
Quando você terminar de jogar com Raspi-config, selecione "Finish" e pressione Enter.
Uma vez Raspbian está instalado, você provavelmente vai querer um ambiente de trabalho normal. Não, você realmente não
precisa de um,
mas eu acho que nós podemos todos concordar que é bom para ver um, especialmente se você é novo no Linux e a visão de uma
linha de comando
Interface lhe dá arrepios. Se você não escolher inicializar diretamente a área de trabalho no utilitário-config Raspi, digite $ pi
quando solicitado seu nome de usuário, e tipo
$ Framboesa
para a senha para efetuar login no Pi. Depois disso, se você deseja iniciar um ambiente de desktop, digite
$ Startx
no prompt. Você deve em breve ser saudado com um desktop padrão, completo com uma enorme imagem de uma framboesa
(como mostrado na Figura 1-6). Os ícones ao longo do lado esquerdo da tela são programas pré-carregados no Pi, que são
utilizados
mais freqüente. Seu arranjo pode variar de o que você vê na imagem, porque distribuições mudar e sua arquitetura é mais
provavelmente atualizado do que estou usando como eu escrevo isto. No entanto, você provavelmente vai ter LXTterminal (por
de linha de comando
interface), Midori (navegador nativo do Pi web), a loja Pi, IDLE (para o trabalho Python), Referência Debian, e talvez
um ou dois outros.

Capítulo 1 ■ Apresentando o Raspberry Pi


Figura 1-6. A tela inicial (desktop) sobre o Raspberry Pi
Seu Pi está agora instalado e funcionando. Parabéns, e dar um tapinha nas costas! Aprecie, mas não ficam muito
confortável. Sua próxima tarefa deve ser a de se certificar que tudo está atualizado. A maioria das atualizações de versão
distribuições Linux e
atualizações regularmente, e Raspbian não é diferente. Há uma boa chance houve várias atualizações importantes
ao software e possivelmente até mesmo o kernel entre o momento em que a Fundação Pi fez a imagem NOOBS
disponível para download e hoje.
Para atualizar o Pi, no tipo de prompt
$ Sudo apt-get update
Você verá linhas de texto fluir suavemente por como o Pi atualiza sua lista de software. Quando terminar, o "$" prompt vontade
Retorna. Neste ponto, tipo
$ Sudo apt-get atualização

■ Apresentando o Raspberry Pi
Linhas de texto deve rolar novamente. Se um novo software está pronto para ser baixado, o Pi vai perguntar se você quer
download e instalá-lo. Pressione Enter (a opção padrão). Quando terminar, e retorna para o prompt $, tudo
deve estar na versão mais recente. Dependendo do que foi atualizado, você pode ser solicitado a reiniciar. Se assim for, reinicie,
restart
Na área de trabalho, digitando
$ Startx
e você estará de volta à tela inicial.

Desligando o Pi
Antes de começarmos a nossa discussão Linux, vamos discutir o desligamento. Por uma questão de fato, fechando o Pi é
desnecessária;
é tal dispositivo de baixa potência que os designers apenas esperar que você vai deixá-lo correr. Você pode desligá-lo, porém,
e no interesse de salvar um pouco de dinheiro e, talvez, a sua Pi, eu sugiro que você desligá-lo quando terminar de usar
isto. Desde que não há nenhuma opção "Off", o Pi é realmente concebido para ser desligado simplesmente desligá-lo, e nada
ruim é suposto acontecer (supondo que você tenha guardado o seu trabalho, não está no meio de alguma coisa, e assim por
diante). Mas apenas
desconectá-lo faz com que muitos de nós tipos de computadores encolher, então me deixe ensinar-lhe a verdade, bom método de
desligamento. Aberto
o terminal, e no prompt, tipo
$ Sudo shutdown -r now
Isso leva o processador através da seqüência de desligamento adequado, matando processos em execução, parar tópicos,
e assim por diante. Quando ele for concluído, ele deve levá-lo de volta para o, página de arranque preto somente texto, se isso não
acontecer, na verdade, poder
abaixo o Pi. Quando estiver nessa página, é verdadeiramente seguro de desligá-lo.

Resumo
Você agora já foram introduzidas para o Pi, instalou seu sistema operacional, e atualizado-lo para dentro de uma polegada de sua
vida. Você tem
também foram introduzidos para a ferramenta Raspi-config, e mesmo de ter jogado um pouco com a interface de linha de
comando
(CLI). É hora de dar uma olhada em Linux.

Capítulo 2
Linux pelo assento de suas calças
Raspberry Pi usa Linux como seu sistema operacional padrão, o que significa que se você não sabe nada sobre isso
OS impressionantes, você vai ter que aprender. Não se preocupe, eu vou tentar fazer isso o mais simples possível.
Quaisquer que sejam seus preconceitos sobre Linux são, provavelmente você pode ignorá-las. Desde a sua criação, o Linux tem
sempre foi considerado como o "OS geek", associada com imagens de botão-up-de manga curta--shirt vestida lápis-pescoço
martelando em um teclado enquanto a tela se enche com texto e em algum lugar, no fundo do porão, uma fileira de
computador armários de disco rígido-driven fita girar à vida. (Ver Figura 2-1.) No fundo, a 20-sided die rolos
do outro lado da mesa, e há o murmúrio suave de um argumento: "Não, Han atirou primeiro!"
Figura 2-1. Campo de jogos dos usuários de Linux (© 2006 Marcin Wichary)
No entanto, não medo. Enquanto alguns de nós ainda vivamente abraçar a cultura e tudo o que ela representa, isso não significa
que
você tem que. Linux já percorreu um longo caminho desde que foi introduzido pela primeira vez, e agora é não só uma potência
real de uma
sistema operacional, mas também extremamente amigável (pelo menos, a maioria de suas distribuições são). Os sabores mais
populares
Linux são Ubuntu e Mint. Ambos são visualmente tão semelhante ao Windows e Mac que muitas pessoas acham a mudança para
eles
divertido e fácil. Outra versão popular do Linux é Debian, que é a distribuição que o sistema operacional do Pi,
Raspbian, baseia-se. Quando ele começou, Debian foi a única distribuição de Linux que era verdadeiramente "open" -permitindo
qualquer desenvolvedor e usuário possa contribuir. Ele ainda continua a ser a maior distribuidora de Linux que não é uma
entidade comercial.
15

Capítulo 2 ■ Linux pelo assento de suas calças


Ok, chega-chifre tooting. A fim de realmente usar o Pi, você vai precisar de pelo menos um conhecimento básico de Linux e
como funciona. Então, vamos começar.

A HISTÓRIA LINUX
Linux é um sistema operacional vagamente baseado no sistema operacional Unix. Ela sempre foi livre e de código
aberto,
e foi lançado pela primeira vez em 1991 por seu criador, Linus Torvalds. Ele é escrito em linguagem de programação
C e foi
originalmente projetado para rodar em computadores da Intel baseados em x86. Durante estes 20 anos, ele foi
portado para todos os
dispositivo que se possa imaginar, de mainframes e supercomputadores para tablets, televisões e consoles de
videogame. o
Sistema operacional Android é construído sobre o Linux kernel do -a pepita de código em um sistema operacional
que é construído.
Como a maioria de software de computador, o Linux não nasceu em um buraco negro. Ela deve seu início para
sistemas operacionais e
kernels tais como Unix, BSD, GNU, e Minix. Na verdade, Torvalds disse na ocasião que, se o kernel GNU tinha sido
completar ou se BSD estava disponível no início dos anos 90, ele provavelmente não teria escrito seu próprio kernel.
Ele começou
seu trabalho sobre o kernel com MINIX e eventualmente adicionados muitos aplicativos de software GNU. Ele
também mudou seu
licenciamento com a GNU GPL, que afirma que o código pode ser reutilizado, desde que ele é lançado sob uma
licença similar.
Nos anos seguintes, propagação Linux, tanto na aceitação do usuário e em dispositivos. Com todos os acima
mencionados
dispositivos que executam o Linux, é o sistema operacional mais amplamente adotado no mundo.
Introdução ao Linux no Pi
Para interagir com o seu Pi, que você vai fazer um monte de trabalho com o terminal-também chamada de interface de linha de
comando.
Com sua área de trabalho até Raspberry Pi e em execução, clique duas vezes no ícone do terminal para iniciá-lo. Porque você já
está
logado, você não será solicitado para um nome de usuário e senha; em vez disso, o prompt vai mostrar algo como isto:
pi @ raspberrypi / $
Esta é a interface de linha de comando (CLI). (Ver Figura 2-2.) Diz-lhe que você é o usuário "pi," conectado ao
máquina "raspberrypi", no diretório inicial.
Figura 2-2. O terminal Raspberry Pi

Capítulo 2
■ Linux pelo assento de suas calças
Se você estivesse em um diretório diferente, o prompt seria exibido nesse diretório, tais como
pi @ raspberrypi: ~ / GPIO $
Arquivos Linux e o sistema de arquivos
Como um sistema operacional, o Linux é completamente construído em torno de arquivos e sistema de arquivos. Um arquivo é
qualquer pedaço de informação-estar
ele texto, imagem, vídeo ou outra, que é identificado por um nome de arquivo e um local. Esse local, também chamado de
caminho de diretório,
ajuda a manter cada arquivo completamente distinto de todos os outros, porque a localização é tecnicamente parte do nome do
arquivo.
Por exemplo,
/wdonat/Desktop/MyFiles/file.txt
é diferente de
/wdonat/Desktop/MyOtherFiles/file.txt.
Os nomes de arquivo também são maiúsculas de minúsculas, o que significa que /file.txt é diferente de /FILE.txt, que é diferente
de /File.txt. Há cinco categorias de arquivos que se tornará familiar para você:
• arquivos de dados do usuário: contém informações que você criar, tais como arquivos de texto ou imagens
• arquivos de dados do sistema que contêm informações usadas pelo sistema, como logons, senhas,
e assim por diante
• arquivos de Diretório, também chamados de pastas, que podem conter arquivos e diretórios. Outros Diretórios
contidos diretórios são chamados subdiretórios, e eles podem ser aninhados quase tão longe
para baixo como você se importa para contemplar
• Arquivos especiais que representam dispositivos de hardware ou algum espaço reservado usado pelo OS
• Os arquivos executáveis, que são programas ou scripts shell que contêm instruções para o
sistema operacional
O sistema de arquivo inteiro em Linux está contido dentro de uma pasta raiz, representada por um único /. Dentro dessa pasta
são subpastas, como bin /, home /, proc /, var /, e dev /. Cada um tem mais subdiretórios nele. Na verdade, se você pudesse
zoom out e olhar para o sistema de arquivos em uma espécie 3-dimensional de forma, ele seria semelhante a um gigante, árvore
de cabeça para baixo.
O / home / pasta é seu diretório home padrão, e cada usuário tem um em um sistema Linux (e Unix). Dentro desse
diretório, você está livre para criar, executar e excluir arquivos. Se você precisa manipular, editar ou excluir arquivos de sistema,
você
pode precisar de qualquer login como o usuário root ou executar o comando sudo.
Usuário Root vs. sudo
Em cada instalação do Linux, existe um usuário, identificado como a raiz, que é capaz de administrar todos os arquivos no
sistema,
incluindo arquivos de nível de sistema. A maioria das contas de usuário não pode editar arquivos no diretório / diretório / var, por
exemplo, mas o usuário root
podem. Devido a esse poder e potencial para abusar dela (mesmo acidentalmente), os usuários do Linux não logar como root, a
menos
que seja absolutamente necessário; quando o fazem, eles log in, fazer o que eles precisam, e fazer logout novamente. Há um
ditado entre os
Geeks: "Só noobs login como root"; em outras palavras, somente neófitos login e ficar conectado como o usuário root.
Há um atalho para autenticar como um usuário raiz, no entanto: sudo. sudo significa s uper u Ser fazer, e ele simplesmente diz
o sistema para executar o comando como se você fosse o usuário root. O sistema pedirá a senha root e, em seguida,
executar o comando. Mais uma vez, o sistema não verificar novamente com você para ver se você realmente quer fazer isso, então
quando
você estiver usando sudo, ser duplamente cuidadoso você sabe o resultado do comando que acabou de escrever antes de
pressionar Enter!

Capítulo 2 ■ Linux pelo assento de suas calças

Comandos
Para se locomover na CLI Linux, você navegar através do sistema de arquivos usando comandos como cd e ls. Comandos
para executar os programas são executados a partir do terminal também. Comandos comuns que você vai usar em uma base
regular e deve
aprender estão incluídas na Tabela 2-1.
Tabela 2-1. Comandos Linux comuns
Comando
Significado
ls
arquivos de lista no diretório atual
CD
Diretório alteração
pwd
diretório de trabalho de impressão
rm filename
remover filename
mkdir directoryname
fazer diretório com directoryname
rmdir directoryname
remover diretório vazio
gato textfile
exibir conteúdo do arquivo de texto no terminal
mv newfile velhoArquivo
mover (renomear) velhoArquivo para newfile
cp velhoArquivo newfile
copiar velhoArquivo para newfile
Homem de comando
Manual de exibição de comando
encontro
leia data do sistema / hora
eco
eco do que é digitado no terminal de volta
grep
programa de pesquisa que usa expressões regulares
sudo
realizar como usuário root
./ Programa
run programa
Saída
parar de sessão de terminal
A maioria dos comandos listados na Tabela 2-1 são auto-explicativos, embora alguns exigem explicação:
• homem: Sem dúvida, este é o comando mais importante. Se você não tiver certeza de que um
nomeadamente comando faz ou o que parâmetros / bandeiras que ele usa, digitando man comando em seu
Terminal traz a página de manual Unix com todas as informações que você sempre quis saber.
Quando você abrir uma página, que normalmente começa com o nome do comando, seguido por um
sinopse das suas várias permutações, uma descrição detalhada do comando, todas as suas opções
e bandeiras, e que essas opções e bandeiras fazer. Enquanto você estiver na exibição manual, basta pressionar
Enter para rolar e pressione q para retornar ao terminal.
• ls: Este comando lista os arquivos em qualquer diretório que acontecer de você estar em; usando bandeiras como -l
e -a inclui informações como permissões de arquivo e datas de modificação. Quando você usa
a bandeira -l, a primeira parte de cada entrada mostra como algo parecido com isto
drwxr-xr-x

Capítulo 2 ■ Linux pelo assento de suas calças


• Neste caso, isso significa que a entrada é um diretório (d); o proprietário pode ler, escrever, e
executar arquivos; Os membros do grupo podem ler e executar arquivos; e todos os usuários podem ler e
executar arquivos. Na maior parte do nosso trabalho com o Pi, você será o proprietário dos arquivos, assim arquivo
Permissões não deve afetá-lo demais. Haverá momentos, no entanto, quando você precisa
para fazer um arquivo executável; isto é o que o comando chmod é para, mas nós vamos chegar a isso em
outro capítulo, tais como o capítulo que trata com o servidor de home media. ls tem algum
outras bandeiras muito úteis também. ls -F lista os arquivos atuais no diretório, mas com um "/"
depois de todos os conteúdos que são eles próprios um diretório. ls -a lista todos os arquivos, incluindo a
Arquivos "ocultos" (aqueles cujos nomes começam com um ponto (.) Ou um ponto duplo (..), que
normalmente não mostra em uma exposição ls standard).

nome do diretório cd: Este comando leva você para o diretório que você nomeado, tal como faria
assumir. Alguns nomes de diretório especiais incluem cd ~, que o leva para seu diretório home
(o "~" ou til, significa seu diretório home), e cd ../, que o leva até um diretório
na estrutura da pasta. Em outras palavras, se você está no ~ / Desktop / MyFiles / diretório, digitando
CD ../
colocaria você no ~ / Desktop / diretório, digitando
CD ../../
iria colocá-lo em seu diretório home (~ /), e digitando
cd ../MyOtherFiles/
iria levá-lo para fora do diretório MyFiles em seu desktop e colocá-lo no diretório MyOtherFiles
em seu desktop.
■ Dica Se você simplesmente digitar cd e pressione Enter, você será levado de volta para seu diretório home, não
importa onde você está.
• pwd: Este é um bom comando de saber. Quando você está perdido, pwd simplesmente diz o que diretório
você está dentro, com a resposta dada como o caminho do diretório raiz. É especialmente útil quando
você é quatro ou cinco pastas profundidade dentro de uma estrutura de diretórios que podem ter repetido pasta
nomes, como
/ Users / wdonat / Desktop / MyApplication / bin / samples / Linux / bin /
e o prompt de terminal lê simplesmente
pi @ raspberrypi / bin $
• rm: Usando o comando rm é como arrastar um arquivo para o lixo, com uma diferença importante:
para todos os efeitos, você não pode desfazê-lo, tenha certeza que você realmente quer apagar esse arquivo!
• mkdir e rmdir: Os comandos mkdir e rmdir criar e apagar diretórios. A ressalva
com rmdir é que o diretório deve estar vazio ou o sistema operacional não irá permitir que você
remova. Você pode, entretanto, usar a opção -p com rmdir, que vai remover uma pasta de (também
Vazio) pastas pai. Por exemplo, a digitação
rmdir -p / foo / bar / this_directory

Capítulo 2 ■ Linux pelo assento de suas calças


excluirá this_directory /, bar /, e foo /, nessa ordem.
• mv e cp: O mv comandos e cp, enquanto bastante simples, pode levar algum tempo para se
costumava. não mv não mover um arquivo tanto como ele renomeia-lo enquanto destruindo o arquivo antigo no
processo: Digitação
mv meuarquivo.txt myfile2.txt
myfile.txt irá renomear a myfile2.txt.
Na estrutura de comando mv, você pode especificar níveis de diretório, portanto, em um sentido você pode mv um arquivo de
uma pasta para
outro. Por exemplo, digamos que você tenha um arquivo chamado myfile.txt na pasta MyFiles em seu desktop. Você pode mover
e
renomeá-lo (dentro da pasta), digitando
mv myfile.txt ../MyOtherFiles/myfile2.txt
myfile.txt será ido de seu diretório atual, enquanto uma cópia do mesmo, myfile2.txt chamado, aparecerá na
MyOtherFiles pasta no seu desktop.
cp é semelhante ao mv, mas ele copia em vez de renomeações, para que você não perder o arquivo original. Mais uma vez, você
pode especificar
níveis de diretório, então cp é útil para copiar através de pastas. Por exemplo, digitar
cp myfile.txt ../myfile.txt
coloca uma cópia do myfile.txt no ambiente de trabalho (supondo que você ainda estavam no / MyFiles / diretório Desktop.)

cat: Usando gato é uma maneira rápida de visualizar um arquivo, como um arquivo de texto, sem realmente abri-lo em um texto
editor. Digitando cat arquivo irá mostrar-lhe o conteúdo do arquivo em seu terminal, mesmo se
não é um arquivo de texto. (Tente realizar gato em um arquivo de imagem e você vai ver um monte de rabiscos.)
Se você quiser visualizar o arquivo linha por linha, em vez de emitir o arquivo inteiro de uma vez em
seu terminal, use o comando more. Isto irá preencher a tela com o primeiro lote de texto, e
pressionando a tecla Enter irá avançar através do arquivo, uma linha de cada vez.

Data: Usando data (sem um argumento) simplesmente imprime data e hora do sistema para o
terminal. Com um argumento, ele permite que você defina essa data e hora.

eco: Este comando apenas ecoa o que você digita volta para você no terminal. Este não é um
comando muito útil no terminal, mas quando você escrever scripts shell (conjuntos de antimicrobiano prescrito
comandos que são executados no terminal), é semelhante a um computador linguagem de programação de
declaração de impressão.

grep: Embora o homem é provavelmente o mais importante desses comandos, grep é provavelmente o
mais poderoso. É um programa de pesquisa que pode pesquisar arquivos e diretórios, usando qualquer
entrada que dá-lo sob a forma de expressões regulares, e "pipe" de que a saída para a tela ou para
outro arquivo. Seu uso de expressões regulares é o que o torna tão poderoso; se você não estiver familiarizado
com eles, uma expressão regular é uma seqüência de caracteres que formam um padrão de pesquisa, e
muitas vezes que a seqüência de caracteres parece ser uma língua estrangeira. Como um exemplo rápido,
grep ^ a.ple fruitlist.txt
irá procurar fruitlist.txt para todas as linhas que começam com um "a", seguido de um único caractere, seguido por "ple"
e imprimir os resultados para a tela. Usando o "|" ou tubo, permite que você envie os resultados para diferentes
de saída, como um arquivo de texto. poder e complexidade do grep é tal que você poderia escrever capítulo sobre o assunto; para
Agora, basta estar ciente de que ele existe.

Capítulo 2 ■ Linux pelo assento de suas calças



./nomeficheiro: Este comando para executar um arquivo executável é bastante simples. Note que isto só funciona
em arquivos que são executáveis, por seu nome de usuário; ele vai dar-lhe um erro se o arquivo não tiver o
permissões corretas ou simplesmente não é um arquivo executável.
• saída: O comando final importante é simplesmente exit-este pára sempre que o trabalho está sendo executado no
terminal (também chamado uma concha) e fecha o próprio terminal.

Exercício: Navegando no Sistema de Arquivos Linux


Vamos praticar movendo em torno do sistema de arquivos do Linux com a linha de comando no seguinte exercício introdutório.
Começar
abrindo uma (linha de comando prompt) prompt de terminal, clicando duas vezes no ícone LXTerminal no desktop do Pi
(o qual é mostrado na Figura 2-3).
Figura 2-3. O ícone na área de trabalho LXTerminal
Quando se abre, verifique se você está no diretório home digitando
cd ~
em seguida, digite
pwd
O terminal deve imprimir
/ home / pi
Agora faça um diretório digitando
mkdir mydirectory
e, em seguida, sem entrar, fazer um subdiretório dentro lo digitando
mkdir mydirectory / meusubdirectorio
Se você agora digite ls, você deve ver mydirectory listado como um diretório disponível. Agora você pode digitar
cd mydirectory / meusubdirectorio
e você estará em seu subdiretório recém-criado.

Capítulo 2 ■ Linux pelo assento de suas calças


Vamos testar a função de eco. No terminal, tipo
echo "Olá, mundo!"
e o terminal deve responder com
Olá Mundo!
Fiel ao seu nome, o eco se limita a repetir os argumentos que lhe dão. No entanto, você pode "echo" alguma coisa para outra
formatos de saída, bem; o padrão simplesmente acontece de ser a tela. Por exemplo, você pode criar um arquivo de texto usando
echo e o operador '>'. Tipo
echo "Este é o meu primeiro arquivo de texto"> file.txt
Se você, em seguida, listar o conteúdo de seu diretório, ls de digitação, você verá file.txt listados. Vá em frente e criar
outro arquivo de texto chamado file2.txt digitando
echo "Este é outro arquivo"> file2.txt
Agora mudar o nome do primeiro arquivo a ser FILE1.TXT digitando
mv file.txt file1.txt
Se você agora listar o conteúdo do diretório atual, você verá file1.txt e file2.txt.
Em seguida, vamos copiar file1.txt para o diretório um nível acima na estrutura da pasta. Tipo
cp file1.txt ../file1.txt
Vamos passar file2.txt ao nosso diretório home, digitando
mv file2.txt ~ / file2.txt
Se você agora listar o conteúdo do seu diretório pessoal digitando
ls ../../
você verá que file2.txt está lá, embora tenha desaparecido do seu diretório atual. Parabéns! Você tem agora
realizado com sucesso as operações de arquivo mais comuns na linha de comando do Linux, ou shell!
Falando de conchas, o Linux tem vários disponíveis na maioria das distribuições.

Escudos em Linux
Escudos em Linux têm nomes como o shell Bourne, o shell C, e o shell Korn. Um escudo é simplesmente uma interface baseada
em texto
entre o usuário e o sistema operacional, permitindo ao usuário executar comandos diretamente para o sistema de arquivos. Cada
shell tem seus prós e contras, mas seria enganoso dizer que um é melhor que o outro. Eles são, cada um, simplesmente
maneiras diferentes de fazer a mesma coisa. O Bourne-again shell, também referido como o bash, foi escrito como um substituto
para o shell Bourne e é o padrão na maioria das distribuições Linux, incluindo Raspbian do Pi. Ele pode ser identificado com o
seu
prompt de login, o "$". Bash tem alguns atalhos de teclado que podem se tornar muito útil se você faz um monte de edição e
arquivo
manipulações no terminal, como veremos em nossos projetos. (Ver Tabela 2-2.)

Capítulo 2 ■ Linux pelo assento de suas calças


Tabela 2-2. Atalhos de teclado da festança

Ou combinação de teclas
Função
Ctrl + A
Move o cursor para o início da linha
Ctrl + C
Pare processo atualmente em execução
Ctrl + D
Sair equivalente a digitar exit
Ctrl + E
Move o cursor para o fim da linha
Ctrl + H
Excluir personagem na frente do cursor
Ctrl + L
Limpar o terminal
Ctrl + R
Pesquisa histórico de comandos
Ctrl + Z
Suspender um programa
Seta Esquerda / Direita
Mover o cursor para a esquerda / direita um caractere
Seta para Cima / Baixo
Percorre comandos anteriores
Shift + PageUp / PageDown
Mover uma página acima ou abaixo na saída do terminal
Aba
Comando ou nome de arquivo de conclusão
Tab Tab
Mostra todas as possibilidades de nomes de comando ou arquivo
Mais uma vez, a maioria dos atalhos são auto-explicativos, mas os dois últimos suportar algumas explicações adicionais:
• Tab: Ao pressionar a tecla Tab quando você estiver no meio da digitação de um nome de arquivo longo vão quer
completar o nome do arquivo para você ou oferecer-lhe uma lista de opções. Por exemplo, se você estiver no
/ Desktop / MyFiles / diretório e gostaria de examinar rapidamente o myextralongfilename.txt
arquivo, basta digitar myextr gato e pressione Tab. Bash irá preencher o nome do arquivo para você,
assumindo que não há outros arquivos com origens semelhantes. Se há outros que começam com
myextr, festança vai fazer um som de erro; neste caso, pressione Tab novamente para ver uma lista de opções.
• Tab Tab: Esse atalho funciona com comandos também. Em seu terminal, digite l e pressione o
Tecla Tab duas vezes. Bash irá responder com todos os comandos disponíveis que começam com "l". (Pode ser uma
lista bastante longa.) Você pode repetir o processo adicionando uma letra de cada vez e pressionar Tab
duas vezes de novo, o shell irá preencher todos os comandos possíveis ou arquivos, dando-lhe uma pré-visualização de todos
resultados possíveis.

Gerenciadores de pacotes
Quando você precisar instalar um programa a partir de uma fonte on-line no Windows, você normalmente o download de um
arquivo .exe ou .msi,
clique duas vezes nele e siga as instruções para instalar o programa. Da mesma forma, se você estiver usando um Mac, você
baixar um
arquivo .dmg e copie o arquivo extraído para o disco rígido ou usar o pacote de instalação incluído.
Linux, no entanto, é um pouco diferente. Linux mantém o controle de seu software usando um sistema de gerenciamento de
pacotes, ou
gerenciador de pacotes. O gerenciador de pacotes é usado para baixar, instalar, atualizar, configurar e remover programas
para o sistema operativo. A maioria dos gestores de pacotes manter um banco de dados interno de software instalado, bem como
todos
dependências e conflitos para evitar problemas ao instalar o software. Gerenciadores de pacotes variam de acordo com a
distribuição.
Debian (e a Pi) usar aptitude, enquanto Fedora usa o gerenciador de pacotes RPM, e Puppy Linux utiliza PETget.
Se você tem experiência de jogar jogos baixados, você pode estar familiarizado com jogos de vapor; você pode se surpreender ao
aprender interface que o Steam é uma variante de um gerenciador de pacotes. A maioria dos gestores de pacotes têm tanto de
linha de comando e
interfaces gráficas. Ubuntu, por exemplo, usa o front-end Synaptic para seu gerente de aptidão.

Capítulo 2 ■ Linux pelo assento de suas calças


Como o Ubuntu, o Raspberry Pi usa o gerenciador de pacotes aptitude, e você provavelmente vai fazer a maior parte de seu
trabalho com
que no terminal. O comando comum a utilizar para instalar um pedaço de software é
sudo apt-get install nome do pacote
que instrui o gerente para fazer o seguinte:
1.
Determine quais das suas fontes de software, ou repositórios, tem o arquivo solicitado.
2.
Entrar em contato com esse repositório e determinar o que as dependências são necessárias.
3.
Baixe e instale essas dependências.
4.
Baixe e instale o software solicitado.
Se isso parece fácil, é suposto ser. Você pode ter problemas quando você solicitar um pedaço de software
não incluídos em seus repositórios instalados, mas mesmo isso é normalmente um reparo fácil. Se isso acontecer, basta digitar
sudo add-apt repositório nome de repositório
em seu terminal. Quando isso é feito, o tipo
sudo apt-get update
para deixar o seu gerenciador de pacotes saber sobre o novo repositório, em seguida, digite
sudo apt-get install nome do pacote
mais uma vez. Felizmente, os repositórios padrão incluído no Raspbian segurar a maior parte do software que você realmente
precisa, então (para este
livro, de qualquer maneira) que provavelmente não executar para esse problema.

Editores de texto
Ao contrário do Windows e Mac-que possuem Notepad, WordPad, e TextEdit-Linux tem várias possibilidades quando se trata
a editores de texto. Há um editor padrão instalado na maioria das distribuições, chamado gedit. Não só é um pouco leve,
Também não está incluído na Pi. O editor do Pi embutido no texto, Leafpad, é decente. E você também pode encontrar-se
recebendo
confortável com nano-outro editor de texto que é pré-instalado no Pi e tem uma interface muito intuitiva. Mas se você
fazer qualquer trabalho de programação séria sobre o Pi, você pode eventualmente querer atualizar para uma das duas potências
do Linux: vi
ou Emacs.
Ambos vi e emacs não são apenas poderosos editores, eles podem ser usados como IDEs (Integrated Development
Ambientes), bem como, com coloração do texto chave / destaque de sintaxe e de conclusão de palavras. Ambos são extensíveis e
customizáveis; emacs, por exemplo, tem mais de 2.000 comandos internos, enquanto que vi pode ser personalizada com as suas
muitas portas
e clones. Na verdade, um dos clones do vi, vim (Vi Improved), está incluído com quase todas as distribuições Linux e é o
que eu vou discutir aqui porque é mais de um IDE que o seu antecessor, vi. Emacs pode ser programável pelo usuário com Lisp
extensões, mas não é um clone do vi para cada sentido de estética que possa ter.
Há, no entanto, uma espécie de guerra entre Emacs e Vim. Os usuários do Linux e Unix fortemente preferem um ou
outro, e eles vão se surpreendentemente animado quando se discute / discutindo os prós e contras de cada um. Como
consciencioso
escritor, eu vou apresentá-lo para ambos os programas aqui, mas como um usuário emacs die-hard, eu farei o meu melhor para
influenciar sua escolha
longe do swill que é Vim. Enquanto discutimos programas e scripts ao longo do livro, eu não vou mencionar como eles são
escrito, apenas o que o resultado final se parece. Você pode até mesmo decidir que gosta do Pi Leafpad, o que é perfeitamente
tudo
direito também.

Capítulo 2 ■ Linux pelo assento de suas calças

Vim vs Emacs vs. nano


Vim é um editor modal. Ele tem dois modos: inserção e normais. No modo de inserção, suas teclas tornam-se parte do
documento. O modo normal é utilizada para controlar a sessão de edição. Por exemplo, se você digitar um "i" enquanto estiver no
modo normal,
ele alterna para o modo de você inserir. Se você seguida, escreva um "i" novamente, um "i" será colocado na posição do cursor,
exatamente como
seria de esperar um editor de texto para operar. Ao mudar e para trás entre estes dois modos, você criar e editar
o documento.
Emacs, por outro lado, tem uma interface mais intuitivo. Você pode mover-se ao longo do documento usando o
teclas de seta, e quando você pressiona uma tecla, você pode esperar que ele apareça sempre que o cursor passa a ser. Especial
comandos, como copiar / colar, salvar, e assim por diante são chamados pressionando a tecla Control, seguido por uma seqüência
de
outros, geralmente começando com o "x". Assim, por exemplo, se você quiser salvar o documento atual, você deve pressionar
Ctrl-x, em seguida, Ctrl-s, destaque no menu emacs como Cx Cs.
Nano, por outro lado, é mais intuitiva do que as duas outras. Você digitar o texto como você faria em qualquer outro
editor, e os comandos usados são sempre mostrados na parte inferior da tela.
Se você gostaria de experimentar com um ou todos os três deles (sempre uma boa idéia antes de você fazer a sua mente
uma forma ou de outra), certifique-se de todos eles que você instalou. Para fazer isso, começar por escrever
sudo apt-get install emacs
e
sudo apt-get install vim
Vim deve ser pré-instalado no Pi, como é nano; emacs, no entanto, não é. Esteja ciente de que é um pouco grande download,
então instalá-lo e suas dependências pode demorar um pouco. Vá tomar uma xícara de café ou comer o jantar, e quando você vem
volta ele deve estar esperando por você.

Usando Vim
Como eu disse, vim é um editor de modal, o que significa que você alternar dentro e fora de Inserção e modos Normal. Para
iniciar um arquivo de teste,
navegar para o seu desktop e tipo
vim testfile.txt
Em vez de abrir outra janela, vim abre no terminal, que pode ficar confuso se você não está acostumado a isso.
Você deve ser confrontado com uma janela e não ao contrário o mostrado na Figura 2-4.

Capítulo 2 ■ Linux pelo assento de suas calças


Figura 2-4. Arquivo vim em branco
Vim abre no modo Normal, o que significa que você não pode editar o arquivo imediatamente. Para fazer isso, você deve digitar
Insert
modo, digitando "i". A palavra "Inserir" aparecerá na parte esquerda-a maneira prática de fundo de lembrá-lo se você é
no modo normal ou Insert. Quando você terminar de digitar, pressione a tecla Esc para voltar ao modo Normal. No modo Normal,
você pode mover o documento com as setas do teclado, da mesma forma que no modo de Inserção, mas você não pode mudar ou
adicionar
nada até que você digite "i". Para salvar um arquivo, verifique se você está no modo Normal pressionando a tecla Esc pelo menos
uma vez. depois
Tipo ": w" (sem as aspas) e pressione Enter. Para salvar e sair ao mesmo tempo, digite ": x" (novamente, sem as aspas) e
pressione Enter. Obviamente, se você estiver no modo de Inserção quando você digita esses personagens, tudo o que você vai
conseguir fazer é adicionar
: w ou: x ao seu documento.
Vim tem um monte de tempo para se acostumar, e muitas pessoas têm problemas para se ajustar aos dois modos diferentes de
operação.
Se você decidir que como ele, existem muitos tutoriais on-line para ensiná-lo a usá-lo para o seu pleno potencial.
Usando Emacs
Emacs (para mim, pelo menos) é um pouco mais intuitivo do que Vim, especialmente quando você está começando primeiro a
usá-lo. Para começar, abra uma
terminal e navegue até onde você quer que seu arquivo de teste, como o desktop. Uma vez lá, digite
emacs testfile.txt
Emacs irá procurar testfile.txt, abri-lo se ele existir, e criá-lo e abri-lo se isso não acontecer. Você vai se deparar com um espaço
em branco
painel, como o que você vê na figura 2-5.

Capítulo 2 ■ Linux pelo assento de suas calças


Figura 2-5. Tela de abertura Emacs
Você pode começar a digitar imediatamente. Tabela 2-3 lista os comandos mais comuns no emacs.
Tabela 2-3. Comandos comuns no emacs
Comando
Keystroke (s)
Abrir / Novo
Ctrl + x + Ctrl + f
Fechar
Ctrl + x + Ctrl + c
Guardar
Ctrl + x + Ctrl + s
corte
Ctrl + w
Cópia
Alt + w
Colar
Ctrl + y
Ir para o início da linha
Ctrl + uma
Ir para o fim da linha
Ctrl + e
Início / fim selecione
Ctrl + espaço

Capítulo 2 ■ Linux pelo assento de suas calças


Assim, por exemplo, se você quiser mover uma linha de texto, mova o cursor para o início da linha. Pressione Ctrl e
o texto de status na parte inferior da barra-espaço esquerdo da janela irá ler "Mark ativado." Em seguida, mova o cursor para
o fim da linha com Ctrl e "e". O texto estado desaparecerá. Agora cortar o texto selecionado pressionando Ctrl + w, movimento
o cursor para onde você deseja colá-lo, e pressione Ctrl + y.
Ele faz demorar algum tempo para se acostumar, por isso, se você decidir que você gosta de emacs, há muitos tutoriais on-line
que pode levá-
lo através do processo de aprendizagem das teclas. Depois que você aprender, ele pode ser muito poderosa, mas lembre-se sempre
esta: Se você ficar confuso, lembre-se que a maioria, se não todos esses comandos são acessíveis a partir do menu.

Usando nano
Como mencionado anteriormente, nano é provavelmente o mais fácil dos três editores de usar e se acostumar. Para iniciar um
arquivo em nano,
basta digitar
nano testfile.txt
em seu terminal, e você deve ser saudado por uma tela como a da Figura 2-6. Tal como acontece com os outros dois editores, se
o arquivo especificado existe, nano irá abri-lo; Se ele não existir, nano irá criá-la para você.
Figura 2-6. Tela de abertura nano
Como você pode ver na Figura 2-6, os comandos mais comuns são listados na parte inferior, com o caractere circunflexo (^)
significando
a tecla Ctrl. Para salvar um arquivo, digite Ctrl + X para sair. Você será perguntado se você deseja salvar o arquivo, e sob que
nome. Dentro
geral, tipo "Y" e, em seguida, Enter para salvar o arquivo que você aberto ou criado.

Capítulo 2 ■ Linux pelo assento de suas calças

Leafpad
O outro editor devo descrever é Leafpad-o, editor de texto cheio de recursos (se leve) baseado em GUI que vem
pré-instalado no Pi. Para abri-lo, clique no ícone no canto inferior esquerdo extremo da área de trabalho do Pi, em seguida,
selecione
"Acessórios" e depois "Leafpad." (Ver figura 2-7.)
Figura 2-7. Abrindo Leafpad
Como você vai ver, parece que a maioria dos editores que você está acostumado, como o TextEdit ou bloco de notas. Se você
estiver confortável usando
que, por todos os meios, por favor, faça. Eu não mencioná-lo muito só porque o seu único inconveniente principal é que ele é
utilizável apenas se
você está trabalhando no ambiente de trabalho gráfico do Pi. Se você estiver conectado remotamente para o Pi e estão trabalhando
exclusivamente através do
linha de comando, Leafpad é inacessível.
Resumo
Isto conclui a sua introdução ao Linux. Enquanto que em nada faz de você um expert, ele deve dar-lhe uma saudável
apreço por tudo o que este sistema operacional poderoso pode fazer. Você aprendeu o básico de como navegar através de seu
sistema de arquivos
usando apenas a linha de comando, e você foram introduzidas para o shell. Você também já foi introduzida para as escolhas de
editores de texto que você tem disponível para você e espero ter escolhido aquele que você se sinta confortável. Uma vez que
você
confusa ao redor com ele em seu suficiente Pi, você pode encontrar-se instalar o Linux em um ou mais dos seus outros
máquinas. Está tudo bem, eu não vou contar a ninguém.
No próximo capítulo, eu vou fazer o meu melhor para dar-lhe uma sólida introdução ao Python.

Capítulo 3
Apresentando Python
Você pode se lembrar do primeiro capítulo que o ímpeto por trás da criação do Raspberry Pi era fazer
programação mais acessível para todos, especialmente as crianças. Para esse efeito, os criadores desejado para libertar um
relativamente
computador poderoso que não custaria muito dinheiro e que qualquer um poderia simplesmente se conectar a um teclado,
mouse e monitor e iniciar a programação.
Outra faceta de que a criação era para tornar a programação mais fácil, e por essa razão Eben Upton e sua
companheiros decidiu incluir Python como parte integrante do sistema operacional do Pi. Python, eles fundamentado, era um
linguagem poderosa, mas foi bastante simples para alguém sem qualquer experiência em programação para pegar rapidamente.
Neste capítulo, vou dar-lhe uma introdução rápida e suja para Python, seguindo seus passos através do processo de criação
alguns scripts, executá-los, e ao longo do caminho aprender alguns dos princípios básicos dessa linguagem poderosa. Eu vou
assumir que
você tem pelo menos um conhecimento de passagem do que Python é talvez uma ligeira pouco de conhecimento de programação,
mas não
mais do que isso, porque vamos enfrentá-lo, é por isso que você comprou este livro.

Scripting vs. uma linguagem de programação


Python é uma linguagem de script. Alguns podem tergiversar sobre se é uma programação idioma ou um scripting da linguagem,
mas para manter os tecnocratas rigorosos feliz, vamos chamá-lo uma linguagem de script.
A linguagem de script é diferente de uma linguagem de programação verdade em algumas maneiras. Enquanto você lê o seguinte
comparações, tomar nota das itálico:
• Linguagens de programação são compilados, ao contrário de linguagens de script. Linguagens comuns como
C, C ++, Java e deve ser compilado por um compilador. O processo de compilação resulta em um arquivo de
código de máquina, ilegível por seres humanos, que o computador possa ler e seguir. Quando você escreve
um programa de C e compilar, o arquivo .o resultante é o que é lido pelo computador. Um dos
efeitos colaterais / resultados deste é que as linguagens de programação podem produzir mais rápidos programas de ambos
porque a compilação só acontece uma vez e muitas vezes porque o compilador otimiza o
código durante o processo de compilação, tornando-se mais rápido do que seria como originalmente escrito.
Linguagens de script, por outro lado, são lidas, interpretadas e postas em prática cada vez que você
executá-los. Eles não produzem um arquivo compilado, e as instruções são seguidas exatamente como
escrito. Se você escrever código desleixado, você obtém resultados desleixado. Por esta razão, as linguagens de script
pode resultar em programas mais lentas.
• Programação / linguagens compiladas mais frequentemente executado diretamente no topo do hardware no qual
eles são escritos. Quando você escrever e compilar um programa em C ++, o código resultante é executado
diretamente pelo processador em sua máquina desktop.
Linguagens de script mais frequentemente executar "dentro" de outro programa, uma que cuida da
etapa compilar acabei de mencionar. PHP, uma linguagem de script comum, é executado dentro do PHP
mecanismo de script. Bash scripts são executados dentro de um shell bash, que você foram introduzidos no
capítulo anterior.
Capítulo 3 ■ Apresentando Python
• Linguagens de programação tendem a ser mais complexo e difícil de aprender.
Linguagens de script pode ser mais legível, são menos rigorosos sintaxe, e são menos intimidante para
não-programadores.
Por esta razão, as linguagens de script são muitas vezes ensinadas em programação introdutória
cursos em escolas e alunos não são introduzidos para línguas mais rigorosas, como C ou Java até
eles dominaram os conceitos básicos de programação.
No entanto, as linhas entre os dois tornaram-se tão turva nos últimos anos como fazer quase completamente
as distinções entre os dois desaparecem. Para enumerar:
• Embora seja verdade que as linguagens de programação rigorosos são compilados e linguagens de script são
Não, avanços em velocidades de processador e gerenciamento de memória em computadores de hoje têm
quase fez as vantagens de velocidade de linguagens compiladas obsoleto. Um programa escrito para
executar uma determinada tarefa em C e um escrito em Python podem tanto fazer isso com quase insignificante
diferenças em velocidade. Certas tarefas podem de fato ser mais rápido, mas não todos.
• Sim, linguagens de script executado dentro de outro programa. No entanto, Java é considerado um "verdadeiro"
linguagem de programação, porque ele deve ser compilado quando executado, mas é executado dentro do
Java Virtual Machine em cada dispositivo. Isto, de fato, é por isso que Java é tão portátil: o código é
transferível, enquanto uma versão da máquina virtual está em execução no dispositivo específico.
C # também é uma linguagem compilada, mas ele é executado dentro de outro ambiente de programação.
• Ok, eu realmente não posso argumentar com o fato de linguagens de programação tendem a ser mais complexo
e difícil de aprender, e linguagens de script que tendem a ser mais fácil de ler e aprender, com
menos regras de sintaxe e mais contexto Inglês-like. Tomemos, por exemplo, as seguintes duas formas de
imprimir "Olá, mundo!" na tela.
Em C ++, você pode usar o seguinte:
#include <iostream>
usando namespace std;
int main () {
cout << "Olá, mundo!" << Endl;
retornar 0;
}
Em Python, você pode usar o seguinte:
imprimir "Olá, mundo!"
Claro, há exceções; Eu vi scripts em Python que eram quase ilegíveis. Da mesma forma, existem alguns
muito programas C legíveis flutuam aproximadamente. Mas, em geral, os scripts podem ser mais fácil para o programador
iniciante para aprender, e
eles podem ser tão poderoso.
Sim, você pode programar o Pi em C, C ++, e até mesmo Java ou (se você é particularmente masoquista) em linguagem assembly.
Mas agora que você sabe e já vi a diferença entre as linguagens de programação e scripts, você não
muito melhor usar Python?
Usando Python para programar o Pi significa que muitas pessoas que nunca sonharia em programar um computador
pode pegar um Raspberry Pi e fazer algo muito legal com ele, como construir uma dos projetos apresentados neste livro,
sem aprender uma língua difícil. Este é, afinal, por que o Pi existe: para tornar a programação mais acessível a
estudantes, e por essa razão Python vem pré-instalado no Pi.

Capítulo 3 ■ Apresentando Python


O Python Filosofia
No mundo das linguagens de script, Python é um parente recém-chegado à cena, embora não tão recente como muitas pessoas
acreditar. Ele foi desenvolvido na década de 1980, talvez 15 anos após a concepção do Unix.
Ele foi implementado em dezembro de 1989 pelo seu principal autor, Guido Van Rossum. Ele manteve-se ativo
no desenvolvimento e progresso do Python, e suas contribuições para a linguagem têm sido recompensados pelo Python
comunidade, que lhe presenteou com o título Benevolent Dictator For Life (BDFL).
A filosofia de Python sempre foi o de tornar o código legível e acessível. Essa filosofia foi resumida
em Python "PEP 20 (The Zen Of Python)" documento, que tem a seguinte redacção:

Bonito é melhor que feio.

Explícito é melhor que implícito.

Simples é melhor que complexo.

Complexo é melhor que complicado.

Plano é melhor que aninhado.

Dispersa é melhor que denso.

Legibilidade faz diferença.

Casos especiais não são especiais o suficiente para quebrar as regras.

Embora praticidade vença pureza.

Erros nunca devem passar silenciosamente.

A menos que explicitamente silenciados.

Diante da ambigüidade, recuse a tentação de adivinhar.

Deve haver um jeito e de preferência apenas um óbvio para fazê-lo.

Apesar de que maneira pode não ser óbvio à primeira vista, a menos que você seja holandês.

Agora é melhor que nunca.

Embora nunca tenha sido muitas vezes é melhor do que * * direito agora.

Se a implementação é difícil de explicar, é uma má idéia.

Se a implementação é fácil de explicar, pode ser uma boa idéia.

Namespaces são uma grande idéia buzinando-vamos fazer mais daqueles!
Além destes mandamentos, Python tem uma mentalidade "baterias incluídas", o que significa que o que quer
tarefa estranha que você precisa fazer em Python, as chances são boas que um módulo já existe para fazer exatamente isso, então
você não tem
reinventar a roda.

Capítulo 3 ■ Apresentando Python

Introdução ao Python
Vamos começar. Há três maneiras de executar Python em seu Pi: usando o intérprete IDLE built-in, em um terminal
janela, ou como um script. Vamos começar usando IDLE.
Correr Python Usando IDLE
O intérprete IDLE é uma espécie de "sandbox" onde você pode trabalhar com Python interativamente sem ter que escrever
roteiros inteiros para ver o que eles fazem. O nome IDLE significa "Integrated Development Environment", mas também paga
homenagem a Eric Idle, um dos membros fundadores do grupo comédia britânica Monty Python. (Veja a barra lateral
"Get Me um bosque!")
Porque é a forma mais user-friendly de experimentar código, vamos usar IDLE primeiro. Clique duas vezes no ícone no seu
área de trabalho (mostrado na Figura 3-1), e você deve ser saudado por uma janela semelhante à Figura 3-2.
Figura 3-1. O ícone IDLE
Capítulo 3 ■ Apresentando Python
Figura 3-2. A janela IDLE
Para acompanhar a grande tradição de programação, vamos começar com o primeiro programa de um programador nunca escreve
em qualquer
idioma. No prompt, tipo
>>> Print "Olá, mundo!"
e pressione Enter. Você deve ser imediatamente saudado com
Olá Mundo!

Capítulo 3 ■ Apresentando Python


Esta é a declaração de impressão do Python, cuja saída é padrão para a tela. Agora digite
X 4 = >>>
e pressione Enter. O prompt vai voltar, mas nada acontece. O que realmente aconteceu é que o intérprete de Python
agora associado com x 4. Se você digitar agora
>>> X
você será saudado com
4
Da mesma forma, se você digitar
>>> Print x
você vai voltar a ser recebidos com
4
Isso ilustra um outro aspecto legal de Python: tipagem dinâmica. Em linguagens como C, você deve definir uma variável de
escreva antes de declará-la, como este:
seqüência x = "Este é um string";
ou
int x = 5;
■ Observação Consulte a seção "Strings" mais adiante neste capítulo para mais informações sobre strings.
Python "sabe" que x é um int (inteiro) quando você diga a ele que x = 5.
Apesar de ser digitado de forma dinâmica, o Python é fortemente tipado. Isso significa que ele irá lançar um erro, em vez de
permitir que
você fazer coisas como adicionar um int para uma cadeia. Você também pode definir seus próprios tipos usando classes; Python
suporta plenamente
programação orientada a objetos (OOP). Eu vou tocar sobre isso mais tarde, mas em suma, significa que você pode criar um
objeto que pode
ser uma mistura de números inteiros, cordas e outros tipos, e que será objeto de seu próprio tipo. Python tem vários dados built-in
tipos: números, strings, listas, dicionários, tuplas, arquivos e alguns outros (como Booleans). Vamos visitar cada uma delas
brevemente no final do capítulo.
Seguindo em frente, vamos tentar jogar com algumas variáveis e operações dentro do IDLE. Digitando
>>> Print x + 5
voltará 9; no entanto, a digitação
>>> X + "dad"
Capítulo 3 ■ Apresentando Python
resulta em um erro. Nesse sentido, no entanto, digitando
>>> "PAI" + "Olá"
da-te
'DADhello'
porque, ao pitão, a adição de cadeias de caracteres é o mesmo que concatenar-los. Se você gostaria de fazer uma lista, coloque-o
na praça
suportes:
>>> Y = ['resto', 1234, 'dormir']
Além disso, um-um dicionário tipo de arquivo composto de chaves associadas e principais valores-está entre chaves:
>>> Z = {'comida': 'spam', 'gosto': 'yum'}
■ Nota Chaves e valores-chave são parte integrante de dicionários Python. Eles são pares de valores apenas
vinculado. Por exemplo,
no z dicionário no exemplo de código anterior, "alimentos" e "spam" são uma chave e um valor de chave,
respectivamente. Da mesma forma,
'gosto' e 'yum' são uma chave e um valor de chave. Para usar um dicionário, você entrada de sua chave, e o valor da
chave é associada
devolvida.

GET ME um bosque!
Python é não nomeado após a cobra; em vez disso, seu criador, van Rossum, nomeou-o depois a trupe de comédia
Monty BBC
Python, de quem ele é um grande fã. Como resultado, as referências de Monty Python abundam na língua. O
tradicional
"Foo" e "bar" usado para ilustrar código em outros programas tornam-se "spam" e "ovos" em exemplos de Python.
Você vai
ver referências a "Brian", "ni" e "arbustos", todos os quais devem fazer sentido para você, se você é um fã
de Monty Python. Até mesmo o intérprete, IDLE, é nomeado após membro do MP Eric Idle. Se você não estiver
familiarizado com
seu trabalho, peço-lhe para acabar com este livro e ir assistir a alguns dos seus esboços. Recomendo vivamente A
Esboço do papagaio morto e O Ministério das caminhadas parvas. Não é necessário estar familiarizado com o seu
trabalho para aprender a
língua, mas pode ajudar a aumentar o seu prazer dela.
Correr Python Usando o Terminal
Vamos rapidamente visitar outra maneira de utilizar o pitão, que consiste em utilizar o terminal. Abra o terminal em sua área de
trabalho do Pi,
e no tipo prompt de Python. Você será recebido com o mesmo texto introdutório como aquela que abre o IDLE
janela e o mesmo prompt >>> interativo. Neste ponto, você pode emitir os mesmos comandos como discutido na
anterior secção "Executar Usando Python IDLE", e obter os mesmos resultados.
Capítulo 3 ■ Apresentando Python
Correr Python usando scripts
O problema com ambos IDLE e o terminal é que você não pode escrever verdadeiros "scripts." Assim que você fechar a janela,
quaisquer variáveis que você declarados desaparecer, e não há nenhuma maneira para salvar seu trabalho. O último método de
escrever Python, em
um editor de texto, aborda esse problema. Você pode escrever um programa completo, salve-o com a extensão .py, e depois
executá-lo
a partir de um terminal.
Vamos escrever um script muito curto usando Leafpad, editor de texto nativo do Pi. Abra-o a partir do menu Acessórios
(como mostrado na Figura 3-3).
Figura 3-3. Abrindo Leafpad
Na janela resultante, digite o seguinte:
X=4
y=x2
impressão y
Salve-o em seu desktop como test.py. Agora, abra um terminal e navegue para sua área de trabalho, digitando
cd ~ / Desktop
Agora você pode executar o seu script escrevendo
python test.py
Você deve ser recompensado com o número 6. Parabéns! Você acabou de escrever, salvo, e executar o seu primeiro
Script Python!

Capítulo 3 ■ Apresentando Python


Quando você escreve os scripts neste livro, sinta-se livre para usar qualquer editor de texto que você desejar. Se você estiver
confortável usando
Leafpad, por todos os meios usá-lo. Eu costumo usar nano ou emacs, os editores baseados em terminal, porque muitas vezes eu
fazer login na minha Pi
remotamente, e Leafpad não pode ser executado em uma sessão de login remoto. Por essa razão, eu vou dizer-lhe para editar um
arquivo da seguinte forma:
sudo nano spam-and-eggs.py
mas usar qualquer editor que você deseja.
Em seguida, vamos olhar para cada tipo de dados de forma breve e ver o que você pode fazer com cada um.

Explorando os tipos de dados do Python


Como mencionado anteriormente, Python fornece-lhe com vários tipos de dados embutidos. Nas seções a seguir, você vai
aprender sobre
Números, strings, listas, dicionários, Tuples e arquivos.

Números
Números parecem auto-explicativo, e de fato, se você tem alguma experiência em programação você vai reconhecer Python de
tipos de números: inteiros, shorts, longs, floats, e outros. Python tem operadores de expressão que lhe permitem
realizar cálculos sobre esses números; estes incluem +, -, / e *,%; operadores de comparação, tais como>,> = e! =, ou,
e e; e muitos outros.
Todos estes operadores são construídos dentro, mas você pode importar outros usando outro dos grandes características do
Python:
importação de módulos. Os módulos são bibliotecas extras que você pode importar em seu script que adicionar ao nativo do
Python
funcionalidade. A este respeito, Python é muito parecido com Java: se você quiser fazer alguma coisa, as chances são muito boas
que
uma biblioteca existe para tornar mais fácil. Por exemplo, se você quiser analisar o texto, como páginas da web, você pode
conferir
o módulo bonita Soup. Precisa efetuar login em um computador remoto (e você, com alguns projectos)? Importar
o módulo telnetlib e tudo que você precisa está disponível. E para os números, o módulo de matemática tem todos os tipos de
funções matemáticas que adicionam funcionalidades número de Python. Você pode experimentá-lo por si mesmo: em uma sessão
IDLE, tipo
>>> ABS (-16)
e você deve obter o resultado 16. Isso porque a função de valor absoluto (I discutir o tema das funções em seu próprio
mais adiante neste capítulo) já está contido nas bibliotecas padrão do Python. No entanto, a digitação
>>> Ceil (16.7)
retornará um erro, porque a função teto é não nessas bibliotecas padrão. Deve ser importado. Agora digite
>>> Matemática importação
>>> Math.ceil (16.7)
e o terminal irá retornar 17,0, -O tecto de x, ou o menor número inteiro maior do que x. Enquanto você pode não precisar
para usar a função de teto, simplesmente importando o módulo de matemática dá-lhe todos os tipos de funcionalidades extras,
como
funções logarítmicas e trigonométricas e conversões angulares, todos com apenas uma linha de código.

Capítulo 3 ■ Apresentando Python

Cordas
Em Python, uma string é definido como uma coleção ordenada de caracteres usados para representar a informação baseada em
texto. Python
não tem um tipo char como C e outras linguagens; um único caractere é simplesmente uma string de um único caractere. Cordas
pode
conter qualquer coisa visível como texto: letras, números, pontuação, nomes de programas, e assim por diante. Isto significa,
claro, que
X 4 = >>>
e
>>> X = "4"
são não a mesma coisa. Você pode adicionar 3 para o primeiro exemplo de x, mas se você tentou fazê-lo com o segundo exemplo,
Python
daria uma de erros que x aponta para uma string com um valor de 4, e não um inteiro, porque o 4 está entre aspas.
Python não distinguir entre aspas simples e duplas; você pode colocar uma corda em ambos, e será
reconhecida como uma string. Isto tem um bom efeito colateral: você pode colocar um caractere de aspas de outro tipo dentro de
uma string
sem ter de fugir com uma barra invertida como você teria que em C. Por exemplo:
>>> "Brian"
da-te
"Brian"
sem quaisquer caracteres de escape necessários.
Existem algumas operações básicas de cordas provavelmente você vai usar muitas vezes em sua carreira, como Python len (o
comprimento de uma string), concatenação, iteração, indexação e corte (equivalente do Python da operação substring). Para
ilustrar, digite os seguintes pedaços de código em uma sessão ociosa e ver que os resultados correspondam à saída do que você
Veja aqui:
>>> Len ('matagal')
9
'matagal' é de 9 caracteres.
>>> 'Spam' + 'e' + 'ovos'
'Spam e ovos'
'spam', 'e', e 'ovos' são concatenados
>>> Title = "sentido da vida"
>>> Para c em título: print c,
Significado da vida
Para cada personagem em 'title', imprimi-lo.
>>> S = "spam"
>>> s [0], s [2]
('s', 'a')

Capítulo 3 ■ Apresentando Python


O primeiro ([0]) e terceira ([2]) personagens de "spam" são 's' e 'a'.
>>> S [1: 3]
'pa'
O segundo quarto através dos personagens são 'pa'. (Ao nomear um intervalo de caracteres em uma seqüência de caracteres, o
primeiro
parâmetro é inclusivo, o segundo não é.)
Você também pode converter para e de objetos de cadeia para aqueles momentos em que você tem um número inteiro que está
atualmente digitado como
uma string, como "4", e você precisa enquadrar-lo. Para fazer isso, é tão simples como escrever
>>> Int ("4") ** 2
16
Você pode converter de e para o código ASCII, formato com caracteres de escape como% d e% s, converter de maiúsculas para
minúsculas, e toda uma série de outras operações, apenas com a biblioteca seqüência built-in de Python.

Listas
Listas, juntamente com dicionários, são, indiscutivelmente, o mais poderoso dos tipos de dados internos do Python. Eles são, na
verdade,
coleções de outros tipos de dados e incrivelmente flexíveis. Eles podem ser alterados no lugar, crescem e encolhem sob demanda,
e
conter e estar contido em outros tipos de objetos.
Se você tem experiência com outras linguagens de programação, você pode reconhecer listas Python como equivalente a
matrizes de ponteiros em, digamos, C. Por uma questão de fato, as listas são na verdade matrizes em C dentro do interpretador
Python. Como tal, eles
pode ser coleções de qualquer outro tipo de objeto, já que seus objetos contidos ponteiro pode estar apontando para, literalmente,
qualquer
outro tipo de dados, incluindo outras listas. Eles são também indexáveis tão rápidas quanto indexar uma matriz C. Eles podem
crescer e encolher
no local, como C ++ e listas 's C #; eles podem ser fatiado, em cubos, concatenado-praticamente qualquer coisa que você faz com
cordas,
você pode fazer com listas.
Para criar uma lista, você declará-lo com colchetes ([]), como assim:
>>> L = [1, 2, 3, 4, 5]
ou
>>> Arbustos = ["spam", 1, 2, 3, "56"]
após o qual você pode jogar todos os tipos de jogos com eles, como concatenação e assim por diante:
>>> L + arbustos
[1, 2, 3, 4, 5, 'spam', 1, 2, 3, '56']
>>> Len (arbustos)
5
>>> For x in l: print x,
12345
>>> Arbustos [3]
3

Capítulo 3 ■ Apresentando Python


(Você pode notar aqui que lista, como arrays, são indexados a partir de 0.) Utilizando as operações de índice e fatia, você
pode alterar as listas no lugar como uma combinação apagar e inserir:
>>> Elenco = ["John", "Eric", "Terry", "Graham", "Michael"]
>>> Elenco [0: 2] = ["Cleese", "ocioso", "Gilliam"]
>>> Elenco
['Cleese', 'Espera', 'Gilliam', 'Graham', 'Michael']
As listas também permitem que você use chamadas de função que estão associados com e específico para eles, como acréscimo,
tipo, reverso,
e pop. Para obter uma lista atualizada (sem trocadilhos!) Da lista de funções, tipo
>>> Ajuda (lista)
para uma repartição up-to-date de tudo que está disponível.
■ Nota função de ajuda do Python é extremamente útil. Se você não sabe como fazer algo ou o que está disponível,
digitando
ajuda (<confundindo object>) no prompt pode ajudá-lo imensamente. (Veja o quadro "Ajuda Python.")

PYTHON AJUDA
Se alguma vez você ficar preso em Python, sua documentação on-line é um recurso muito útil. Aponte seu
navegador para
http://docs.python.org/2/library/stdtypes.html, e você pode ler sobre todos os tipos de dados padrão
disponível para você e como usá-los. Da mesma forma, http://docs.python.org/2/library/functions.html
irá mostrar-lhe todas as funções que estão sempre disponíveis para você usar. Sua função ajuda built-in também é
muito
minuciosa. Para testá-lo, em uma sessão IDLE, tipo
import string
e depois
ajuda (string)
Você será recompensado com tudo que você sempre quis saber sobre cordas.

Dicionários
Como as listas, dicionários Python são coleções extremamente flexíveis de objetos. Os dicionários diferem na medida em que, ao
contrário de listas, eles
não são ordenadas; você pode acessar itens de uma lista por seu índice, mas os itens de um dicionário são acessados por chave.
Noutros
palavras, dicionários conter pares de valores-chave; solicitando a chave retornará o valor associado a essa tecla. Para
exemplo, na seguinte dicionário, o valor "spam" pode ser acessado por sua chave, "alimento":
>>> Dict = {'comida': 'spam', 'bebida': 'cerveja'}
>>> Dict ["alimento"]
'Spam'

Capítulo 3 ■ Apresentando Python


Como as listas, os dicionários podem ser aninhadas:
>>> Dict2 = {'alimentos': {'ham': 1, 'ovos': 2}}
Os meios a tecla 'comida' tem um valor de chave associada {'ham': 1, 'ovos': 2}, que é em si um dicionário.
Dicionários ter determinado método chama específico para eles:
>>> Dict.keys ()
["alimento", "bebida"]
Isto lista todas as chaves no dict.
>>> Dict.has_key ("alimento")
Verdade
'True' se dict contém a chave "alimento" Isso retorna e retorna 'False' contrário.
Dicionários podem ser alteradas no lugar
>>> Dict ['alimentos'] = ['ovos']
>>> Dict
{'comida': ['ovos'], 'bebida': 'cerveja'}
Isso altera o valor da chave de 'comida' de 'spam' para 'ovos'. (Aqui, você vai notar que os 'ovos', além de ser um
artigo normal, é também uma lista de um item.)
■ Nota Chaves nem sempre precisa ser strings, como você viu aqui. Você pode usar quaisquer objetos imutáveis
como chaves; se vocês
acontecer de você usar números inteiros, o dicionário se comporta mais como uma lista, ou seja, é indexável (por
chave de inteiro.)
Tuples e Arquivos
As últimas grandes tipos de dados eu vou mencionar aqui são tuplas e arquivos. Tuplas são coleções de outros objetos que não
podem ser
alteradas e arquivos se referem à interface para arquivar objetos em seu computador.
Tuplas são coleções de objetos solicitados. Eles são muito parecidos com listas, mas ao contrário de listas, que não pode ser
alterado em
lugar e são escritos com parênteses, e não entre colchetes, como este:
>>> T = (0, 'palavras', 23, [1, 2, 3])
Aqui, t contém dois inteiros, uma corda e uma lista. Você pode tuplas ninho, indexá-los, cortá-los, e fazer praticamente
tudo o que você pode fazer com uma lista.
Então, por que estão lá Tuplas se eles são quase exatamente como listas? A resposta mais comumente aceito para isso é por que
eles são imutáveis, eles não podem ser alterados. Ao declarar uma coleção de objetos como uma tupla, em vez de uma lista, você
garante
que a coleta não serão alterados em outro lugar no seu programa. É uma espécie de como declarar algo como uma const
no C se tentar alterá-lo mais tarde, o compilador lhe dará um erro.
Lembre-se que eu falei sobre arquivos no Capítulo 2, para que a noção deve ser familiar para você. Python tem um built-in
função, aberto, que cria um objeto de arquivo que links para um arquivo sentado na memória do seu computador. Objetos de
arquivo são um pouco
diferente do que os outros tipos, como eles são realmente nada mais do que uma coleção de funções que podem ser chamados

Capítulo 3 ■ Apresentando Python


esses arquivos externos. Essas funções incluem a ler, escrever, funções de análise de abrir, fechar e vários para arquivos de texto.
Para
ilustrar, as seguintes linhas de abrir um arquivo test.txt (ou criá-lo se ele ainda não existir) para escrever, escreve uma linha de
texto
a ele (completo com um caractere de nova linha de escape), e em seguida, fecha o arquivo:
>>> Myfile = open ('test.txt', 'w')
>>> Myfile.write ('Olá, arquivo de texto! \ N')
>>> Myfile.close ()
Tudo isso acontece dentro de qualquer diretório que você acontecer para ser em quando você executar as linhas.
Note, no entanto, que como está escrito, se test.txt já existe, seu conteúdo será substituído pelo myfile.write ()
ligar. Se você quiser acrescentar ao arquivo em vez de substituí-lo, use um 'a' flag quando você abri-lo, em vez de um 'w'.
Uma vez que você tem um arquivo aberto, você pode ler e escrever para ele, tendo em mente que você só pode ler objetos de
cadeia
a partir de objetos de arquivo. Isto significa simplesmente que você deve converter todos os objetos no arquivo para seus tipos de
dados "reais" antes de você
executar quaisquer operações sobre eles; se myfile.readline () retorna '456', você deve converter que 456 para um número inteiro
com
int () se você quiser executar cálculos sobre ele.
Operações de arquivo são muito úteis, porque eles permitem que você criar e gravar arquivos de texto, mas eles são um pouco
além do
escopo deste capítulo introdutório. Vamos revisitar-los mais tarde, como podemos usá-los em projetos.
Como você pode ver, os tipos de dados internos do Python pode fazer qualquer coisa uma verdadeira "linguagem de
programação" pode fazer-la as vezes
mais facilmente e mais economicamente. Ao combinar os tipos, você pode fazer alguns processos verdadeiramente poderosos
com Python,
como você verá a seguir.

Programação com Python


Agora que você já viu os tipos de dados, vamos investigar como usá-los em programas reais. Para criar um programa Python,
você deve sair do intérprete e abra um editor de texto, como o Emacs ou Leafpad do Pi. Depois de criar o programa,
guardá-lo com uma extensão ".py". Você vai então ser capaz de executá-lo digitando
$ Python myprogram.py
Python é única entre as linguagens de programação em sua sintaxe na medida em que bloqueia código usando espaços em branco
ou
blocos de recuo. Linguagens como C coloque um bloco de código como uma instrução if dentro de chaves; Usos Python
dois pontos e recuo para delinear o bloco.
Código em C parece com isso:
Se (x == 4)
{
printf ("x é igual a quatro \ n");
printf ("Nada mais a fazer aqui.");
}
printf ("A instrução if é agora superior.");
O mesmo código em Python se parece com isso:
Se x == 4:
print "x é igual a quatro"
print "Nada mais a fazer aqui."
imprimir "A instrução if é agora mais."

Capítulo 3 ■ Apresentando Python


Você pode observar dois detalhes adicionais sobre o programa Python. Em primeiro lugar, os parênteses na instrução if são
desnecessário. Em Python, os parênteses são opcionais, mas na maioria dos casos é considerada boa prática de programação
usá-los, uma vez que melhora a sua legibilidade do código. Você também vai notar que a maioria das outras línguas acabar com
suas linhas de código
com um ponto e vírgula; Python não. Isso pode levar algum tempo para se acostumar, mas é uma mudança agradável para não ter
um programa
não compilar porque você tem um ponto e vírgula mal colocada ou ausente em algum lugar nele. Em Python, a fim de que a linha
está
o fim da instrução-tão simples.
Você já viu as declarações já, como
X=4
y = "Este é um string."
Como mencionado anteriormente, Python não requer declarações dizendo que x é um inteiro e y é uma seqüência de apenas
sabe. Estas declarações são conhecidos como atribuições, em que o valor do lado direito é atribuído à variável no
deixou. Existem várias convenções de nomenclatura de variáveis em diferentes idiomas, mas o melhor conselho que posso dar é
para
basta escolher uma convenção e ficar com ela. Se preferir caso Pascal (ThisIsAVariable), usá-lo; se você preferir camelback
(thisIsAVariable), usar esse. Basta ser consistente, pois você agradecer-se mais tarde. Em qualquer caso, uma atribuição faz
apenas
que: atribui um valor a uma variável, se essa variável é um número, seqüência, lista ou alguma outra coisa. É o mais simples de
as funções de programação.

IF testes
A próxima funcionalidade de programação veremos é a instrução if e seus derivados elif e else. Tal como seria de
espere, se realiza um teste e, em seguida, seleciona a partir de alternativas com base nesses resultados dos testes. O mais básico if
se parece com isso:
>>> Se 1:
print 'true'
Verdade
'1' é o mesmo que o Boolean "true", de modo a declaração anterior será sempre imprimir "true".
■ Observação Quando você digita o se instrução no prompt do Python em seu terminal (ou IDLE) e terminá-la com
dois pontos, o
próximo prompt será sempre o reticências (...), o que significa Python está esperando um bloco recuado. Se você é
feito com o
bloco recuado, apenas pressione Enter novamente para acabar com ela. Se você estiver escrevendo um programa
em um editor de texto, certifique-se de recuar os blocos
você precisa recuar.
De agora em diante, eu vou formatar o código como se fosse em um editor de texto e imprimir a saída como se você tivesse
executar o script.
Um teste mais complicado usa elif e else, como o seguinte:
x = 'spam'
se x == 'ovos':
impressão "ovos são melhores quando eles são verdes!"
elif x == 'ham':
imprimir "este leitão pequeno permanecido em casa! '
outro:
print "Spam é uma coisa maravilhosa!"

Capítulo 3 ■ Apresentando Python


Obviamente, este código gera "Spam é uma coisa maravilhosa!" Quando o programa é executado, o computador verifica
o primeiro caso. Se essa declaração é determinada para ser verdade, ele executa o bloco recuado imediatamente após ele. Se essa
declaração
é falso, ele ignora o bloco recuado e procura uma elif, que, em seguida, avalia. Mais uma vez, se ele está determinado a ser
verdade,
ou se não houver nenhum elif, o computador executa o bloco seguinte; se não, ele ignora esse bloco e procura outro elif
ou uma pessoa.
Três pontos aqui são importantes o suficiente para mencionar: Em primeiro lugar, lembre-se que, se uma declaração se for
considerada
falso, nada no bloco seguinte recuado é executado no computador, pula direto para a próxima linha não endentada.
Em segundo lugar, Python, como outras línguas, usa os sinais de igual duplos para indicar um teste de igualdade. Uma única igual
sinal é usado para tarefas; um duplo é um teste. Digo isto porque cada programador-e eu quero dizer a cada
programador, em algum momento, utilizou um único sinal de igualdade em uma instrução if, e seu programa tem feito todos os
tipos de
funky, coisas inesperadas como resultado. Você vai fazê-lo também, mas eu espero que para salvá-lo, pelo menos, um pouco
exasperado antes do tempo.
Em terceiro lugar, Python ignora linhas em branco e espaços (exceto no prompt interativo e blocos recuados, é claro)
e comentários. Isto é importante porque ele libera você para se certificar de seu código é legível para outros programadores,
mesmo
se esse outro programador é você em uma data posterior.
■ Nota Comentários em Python são precedidos com um "#"; o programa ignora qualquer coisa nessa linha após ela.
Legibilidade em seu código é um grande negócio; espera que eu tambor que em sua cabeça regularmente. Você prefere tentar
para depurar o programa anterior ou algo como isto:
x = "este é um teste '
if x == 'este não é um teste':
imprimir "Este não é" + x + "nem é um teste"
imprimir 89 * 2/34 + 5
outro:
print x + "e eu estou feliz" + x + str (345 * 43/2)
imprimir "há muito poucos espaços neste programa"
Enquanto você certamente pode ler a segunda, não é divertido, e depois de centenas de linhas de código sem espaços,
linhas em branco ou comentários, seus olhos vão agradecer-confia em mim. Veja a diferença apenas no segundo ao último linha
se
você usar espaços:
print x + "e eu estou feliz" + x + str (345 * 43/2)
Você está autorizado a usar espaços em branco; usá-los livremente.
A última parte da declaração se eu quero mencionar é a operadores booleanos. Em um teste de verdade, X e Y é verdadeiro se
tanto
X e Y são verdadeiras. X ou Y é verdadeiro se X ou Y é verdadeiro, e X não é verdadeiro se X é falsa. Python usa as palavras, ao
invés de C
&& ou C ++ 's, ||, ou! operadores. Saiba esses operadores; eles vão vir em muito acessível.

Loops
Normalmente, um programa é executado a partir de cima para baixo, uma linha de cada vez. No entanto, algumas declarações
podem fazer com que o
a execução do programa a saltar por todo o lugar; estas declarações de controle de fluxo incluem IF / thens e loops.
O loop mais simples é provavelmente um bloco de código, executou um determinado número de vezes, como
para x no intervalo (0, 10):
print "Olá"

Capítulo 3 ■ Apresentando Python


Isso simplesmente impressões
Olá
Olá
Olá
Olá
Olá
Olá
Olá
Olá
Olá
Olá
Você também pode usar loops para percorrer uma string, ou até mesmo uma lista:
para x no "Camelot":
imprimir "Ni!"
Ni!
Ni!
Ni!
Ni!
Ni!
Ni!
Ni!
ou, para percorrer e imprimir os próprios personagens:
para x no "Camelot":
print x
C
uma
m
e
eu
o
t
Embora a sintaxe do laço para é um pouco diferente do que a de C ou Java, uma vez que você se acostumar com isso, usando a
sintaxe
torna-se uma segunda natureza.
A outra declaração de loop é a declaração enquanto. Esta declaração avalia uma condição e continua a executar
o bloco recuado, enquanto que a afirmação é verdadeira:
x=0
while (x <10):
print x
X=x+1
0
1
2

Capítulo 3 ■ Apresentando Python


3
4
5
6
7
8
9
Ao contrário do que você pode ter esperado, esse código nunca imprime "10", porque x é incrementado depois que é impresso.
Ligar
o décimo iteração, as gravuras intérprete "9" e depois incrementa x para 10. Neste ponto, a condição enquanto há
mais verdade, então o código dentro do bloco nunca é executado.
Enquanto declarações são úteis se você está esperando por um determinado evento acontecer, como uma tecla ou pressionando
um usuário
"Q" para sair. Um exemplo disto segue:
while True:
var = raw_input ("Enter algo, ou 'q' para sair:")
impressão var
se var == 'q':
parar
Dois detalhes a notar sobre este script: em primeiro lugar, em Python 2.x, raw_input o comando é usado para obter a entrada de
um usuário.
Em Python 3.x, o comando foi alterado para simplesmente entrada. Em segundo lugar, lembre-se o comando pausa. Este comando
literalmente quebra você fora do laço acontecer de você estar em. Portanto, neste caso, a parte ao mesmo tempo do loop faz ir
para sempre, mas se o cheque var == 'q' retorna true, o script quebra fora do circuito e termina o programa.
Funções
Funções permitem que você, o programador, a reutilização de código. Eles permitem que você seja mais eficiente. Em geral, se
você achar que você
precisa executar uma tarefa específica em seu código mais de duas vezes, essa tarefa é um candidato provável para uma função.
Suponha que você escrever um programa simples que calcula a área e perímetro de um retângulo. Ele pede ao usuário para
entrada
altura e largura do retângulo e, em seguida, executa os cálculos necessários. Uma das maneiras mais simples de fazer isso é
para criar uma função que recebe como parâmetros de entrada altura e a largura do retângulo. Em seguida, imprime a área do
retângulo
e o perímetro e retorna para o programa. Para fazer isso, usamos um bloco de instrução composta, começando com a def
tarefa. A atribuição def é como nós definimos uma função, com a sintaxe functionname def (firstparameter,
secondparameter):
def AreaPerimeter (altura, largura):
height = int (altura)
largura = int (largura)
área = altura * largura
perímetro = (altura * 2) + (2 * largura)
print "A área é:" + área
print "O perímetro é:" + perímetro
Retorna
while True:
h = raw_input ("Enter altura:")
w = raw_input ("Enter width:")
AreaPerimeter (H, W)

Capítulo 3 ■ Apresentando Python


Este pequeno programa simplesmente pega os números que você alimentá-lo e retorna os cálculos. Enquanto isso não pode ser o
melhor exemplo (você pode apenas calcular na mosca com menos código), ele ilustra a idéia de reutilização de código. Com esta
função,
não importa onde no programa que você precisa para calcular a área ou perímetro, tudo que você precisa fazer é chamar
AreaPerimeter com
os dois parâmetros de "altura" e "largura" e é feito para você.
Um ponto a salientar aqui: raw_input sempre retorna uma seqüência de caracteres, mesmo se você digitar números. É por isso que
a altura e
variáveis largura em AreaPerimeter deve ser convertido para ints antes de quaisquer cálculos podem ser realizados.
Funções do Python são um pouco diferentes em algumas maneiras de métodos, funções e procedimentos em outro
línguas, se você estiver familiarizado com outras linguagens. Por um lado, em Python todas as funções são chamadas por
referência. Sem
ficando muito profundamente na programação de falar, isso significa que quando você passar um parâmetro para uma função,
você realmente
só passar um ponteiro para uma variável, não a própria variável. Isto tem o efeito de tender a tornar mais Python memória
Famílias com você não está copiando listas inteiras à toa e passá-los para trás e para funções, por exemplo. Ao invés,
se uma função pega uma lista como um parâmetro, você passá-lo a localização de memória do primeiro item da lista, e ele faz o
que
precisa com base nessa localização e produto.
Outro aspecto interessante de funções é que eles são instruções executáveis. Isto significa que uma função
definição pode realmente ser declarados e chamado dentro de um if, por exemplo. Embora não seja normal, é legal (e
por vezes, útil) para ser capaz de fazer isso. defs pode ser aninhado dentro de loops, outros defs, e até mesmo listas e dicionários.
Visitaremos funções novamente como nós atravessamos os projetos; por agora, estar ciente de que eles existem, e eles são
extremamente
peças úteis de qualquer programa que você escreve.
Objetos e Programação Orientada a Objetos
Outro item importante que eu quero abordar nesta introdução Python é a sua capacidade para executar código nativo orientada a
objetos.
Durante a programação orientada a objetos (OOP) pode ser um tópico avançado, e é provavelmente além do escopo deste livro,
é um tema bastante importante escovar mais de ânimo leve, methinks.
OOP é um paradigma em que os dados do programa é dividido em uma mistura de objetos e funções ou métodos. Um objeto é
um tipo normalmente uma coleção de dados de tipos de dados, como números inteiros, strings, e assim por diante. Os objetos são
normalmente parte de aulas,
que têm associado a métodos que atuam sobre os membros dessa classe.
Talvez a maneira mais fácil de ilustrar isso é com um exemplo usando formas. Neste exemplo, uma forma é uma classe de
objectos. Essa classe tem associado valores, tais como nome e numberOfSides. Essa classe métodos também associados,
como findArea ou findPerimeter.
A classe forma tem subclasses, que são mais específicos. Um quadrado é um objeto de forma, com o valor shapeType
igual ao quadrado, e numberOfSides igual a 4. Seu método findArea assume o valor numberOfSides e praças de TI.
Enquanto isso, um objeto triângulo tem valores diferentes para o nome, shapeType e numberOfSides, e seu método findArea
é diferente.
Este exemplo, enquanto uma rápida introdução aos objetos, também ilustra o conceito de herança-parte integrante
de OOP. O objeto triângulo herda seu nome, numberOfSides, e suas partes findArea de seu pai classe, forma (embora
essas partes têm diferentes valores e implementações). Se um objeto herda da classe forma, ele também irá herdar
essas partes. Pode não necessariamente utilizar essas partes, mas tem-los. Ele pode ter partes adicionais (o objeto círculo pode
tem um valor do raio, por exemplo), mas terá sempre as partes.
Se você começar a usar classes em sua programação, Python é simples de entender do que suas contrapartes como
C ++ ou Java. Você pode muito bem nomear qualquer objeto ou método com a seguinte sintaxe: objeto.atributo, se
esse atributo é um objeto ou um método. Se você tem um objeto chamado círculo holygrail, o seu raio é holyGrail.radius.
A Praça chamado unexplodedScotsman tem uma área definida por unexplodedScotsman.findArea.
Como eu disse, OOP está além do escopo deste livro. Como funções, no entanto, pode ser extremamente útil, especialmente
em programas mais longos, mais intrincados. Sinta-se livre para investigar mais à medida que avança em seus estudos Python.
Você vai
achar que Python é uma linguagem muito versátil, bem como, até mesmo permitindo que você execute funcional e outro
avançado
tarefas de programação.

Capítulo 3 ■ Apresentando Python

Resumo
Neste capítulo, eu dei-lhe uma breve introdução, mas prático para Python, começando com um pouco de sua história e, em
seguida,
continuando com a forma de interagir com o prompt do Python, ajudando você a aprender alguns dos seus tipos de dados, e em
seguida, mostrando
você um pouco de escrita script utilizando um editor. Não se preocupe se você não pode levar todas essas informações em uma só
vez; há muito
para aprender aqui, e eu vou explicar o que estou fazendo à medida que progredimos através dos projectos no livro.
No próximo capítulo, vamos dar uma olhada em Eletrônica 101. Você vai ser a construção de projetos, depois de tudo, e antes
você faz, você deve ter uma compreensão básica dos conceitos de eletricidade, poder, e várias peças eletrônicas e dispositivos.
Capítulo 4
Eletrônica em 100 mph
Você comprou este livro para aprender a programar usando Python e para aprender sobre o Raspberry Pi. Você também quer
construir
alguns projetos interessantes, aprender como o Pi roda Linux, e aprender como você pode usar Python para fazer a interface com
o Pi e
vários add-ons.
Bem, nós vamos chegar a isso, mas antes que eu preciso para explicar alguns outros pré-requisitos essenciais, ou seja,
as regras de eletrônica e eletricidade, ferramentas, segurança, e alguns how-tos. Eles podem não ser os temas mais sexy, mas
qualquer livro que lida com projetos de construção de eletrônicos deve ter pelo menos um capítulo que lida com conceitos como
A lei de Ohm e Como Soldar, e o fato de que, sim, é perfeitamente possível para eletrocutar-se com uma bateria de 9V.
(Veja o quadro.) Para não mencionar que eu não gostaria que meus leitores a sofrer qualquer lesão corporal, porque eu não fazer o
suficiente
instruções de segurança. Então, por favor, pelo menos desnatado neste capítulo, e tomar algumas notas se esta informação é
completamente novo para
vocês. Se você terminar o capítulo e sentem a necessidade de proteger-se por vestir de uma maneira semelhante à Figura 4-1, que
é
perfeitamente bem.
Figura 4-1. Equipamento de segurança possíveis laboratório

Capítulo 4 ■ Electronics em 100 MPH


Darwin Awards
Se você não está ciente deles já, as Darwin Awards são prêmios humorísticos concedida anualmente àqueles
membros da raça humana que conseguiram retirar-se do pool genético, seja através da morte
ou esterilização, devido à sua própria estupidez. Os vencedores passados incluíram ladrões eletrocutando-se
enquanto
roubar fio de cobre a partir de subestações elétricas, condutores que tenham mudado de lugar com os seus
passageiros, enquanto
dirigir em velocidades de estrada, e os usuários de drogas injetáveis sementes de papoula em suas veias.
O incidente electrocussão 9V bateria ocorreu quando um marinheiro da marinha, em uma tentativa de medir elétrica
de seu corpo
resistência, preso as sondas de pontas de seu multímetro 9V em seus polegares, fazendo seu sangue um condutor
perfeito.
A corrente viajou por todo o seu coração, interrompendo seu batimento cardíaco e matá-lo.
Você pode ler mais dos Prêmios Darwin em seu site: www.darwinawards.com.
Conceitos básicos de eletricidade
. . . e ele falou, e falou assim: "Haverá uma lei, e essa lei é de Ohm, e é essa
V é igual a vezes eu R. "
OK, eu sei que esta citação é um pouco de queijo; No entanto, a Lei de Ohm é de fato a primeira coisa que qualquer engenharia
elétrica
aluno aprende, e isso afeta tudo que você faz em eletrônica. Isto significa que a voltagem total (V; medida em volts) a
qualquer ponto de um circuito é igual ao produto da corrente (I; medido em amperes) vezes a resistência (R; medido
em ohms). O Eu representa indutância, que é por isso que é um eu, não um C. Então, se você tem um resistor de 200 ohms que
tem
0,045 amps que se deslocam através dela, a tensão através do resistor que é igual a 9V. Como qualquer bom equação algébrica, é
intercambiáveis:
V = I × RI = V ÷ RR = V ÷ I
A outra variável importante em um circuito é poder, representado por P e medida em watts. Poder é igual a tensão
vezes corrente, tensão ao quadrado dividido por resistência, ou corrente vezes quadrados resistência. Se isso é confuso, use o
diagrama na Figura 4-2 para melhor vislumbrar as relações.

Capítulo 4 ■ Electronics em 100 MPH


Figura 4-2. Equações elétricas comuns
Como um exemplo, uma forma comum de ilustrar os diferentes conceitos eléctricos é com água e diferente tamanho
tubos. Em um "circuito de água," o poder da água é fornecida por uma bomba. Em um circuito elétrico, o poder é fornecido por
um
bateria. Em um circuito de água, leva a bomba de água a baixa pressão, aumenta a pressão, e envia a água no seu caminho
em torno do circuito. Em um circuito elétrico, a bateria demora "baixa pressão" tensão, aumenta suas volts, e envia-lo em
o seu caminho ao redor do circuito. Em ambos os casos, a corrente, o fluxo de electrões, quer-de-água ou em torno do circuito.
A resistência do circuito é análogo ao quão grande é a tubulação de água. Se o tubo for grande, isso oferece menos resistência ao
a água que flui através dele. Num circuito, se o fio tem menos resistência que permite que os electrões fluam livremente. Está em
por sua vez, afeta o poder.
Aumenta o poder com resistência e corrente. Pense do poder como a "velocidade" da energia elétrica; se você tem um certo
quantidade de água que flui a partir do final de uma mangueira e você segure o dedo sobre a extremidade, aumentando a
resistência, a
velocidade da água aumenta. O aumento da resistência do circuito aumenta a potência. Há a subprodutos
este, é claro. Bloqueando parcialmente a extremidade de uma mangueira aumenta a fricção na boca da mangueira, e assim o calor.
Da mesma forma, aumentar a resistência de um circuito muitas vezes significa aumento do calor. O calor é mau para os circuitos,
especialmente frágil
itens como circuitos integrados (CIs), tantos componentes eletrônicos que produzam calor (devido à resistência interna,
entre outras razões) têm, frequentemente, um dissipador de calor construído em para dissipar o calor que eles criam.
Na sua mais fundamental, a eletricidade é nada mais do que elétrons em movimento e para trás, ao longo de um fio ou de algum
outro caminho. Este caminho é sempre o caminho de menor resistência. Dada a escolha entre duas formas de viajar, os elétrons
será sempre
tomar o caminho mais fácil, se é através de um fio, uma chave de fenda ou um torso humano. Seu objetivo, ao trabalhar com estes
electrões, é para assegurar que o caminho mais fácil não envolve o corpo. Você não vai ser sempre bem sucedido; eu estive
chocado mais vezes do que posso contar. (Na verdade, para além dos múltiplos choques elétricos eu experimentei com baterias
e fontes de alimentação, eu realmente sido atingido por um raio três vezes.) Um experimentador consciencioso deve tentar
reduzir esses incidentes, se por nenhuma outra razão do que eles podem machucar! Luvas de borracha pode ajudar (embora todos
eles vestindo
o tempo é um pouco impraticável), como botas de borracha lata ou sapatos com solado de borracha. As botas de borracha razão
são uma boa idéia, em
Além de eles serem extremamente elegante, é que os elétrons sempre deseja se conectar ao chão. Essa "terra" pode
ser um terreno de energia, como o terminal de uma bateria; a terra do chassi, como um bloco de motor em um carro; ou o real
terra,
chamado de aterramento.
Com os conceitos básicos de eletricidade sob seu cinto, vamos falar sobre as ferramentas que você precisa para construir seus
projetos.

Capítulo 4 ■ Electronics em 100 MPH


Ferramentas necessárias para Robótica
Todos os engenheiros precisam de boas ferramentas, e como um hobby / experimentador / engenheiro de brotamento, você não é
nenhuma exceção. Isso amolgado,
chave de fenda bateu-up sentado na gaveta de lixo da sua cozinha pode ser bom para erguer os grampos para fora da parede, mas
se você
tentar usá-lo para qualquer trabalho delicado em seus projetos, você está apenas pedindo para ter problemas. Da mesma forma,
um par de cortadores de fio com
enormes lacunas nos dentes não vai fazer nenhum bem quando você está tentando alcançar dentro de uma pequena abertura e clip
o fio vermelho
antes de o cronômetro chegar a zero. A fim de construir coisas legais, você precisa de boas ferramentas. As seções seguintes
descrevem o
ferramentas necessárias que você deve ter.
Chaves de fenda
Você precisa de um bom conjunto de chaves de fenda pequena, de joalheiro. Passar o adicional de US $ 10 e obter um conjunto
de boa qualidade que irá durar
um longo período de tempo, de preferência, um feito de aço endurecido. O conjunto deve ter pelo menos três regular e três
Phillips
chaves de fenda, com os tamanhos regulares que variam de 3/64 de polegada para 1/8 de polegada, e os tamanhos, incluindo
Phillips
tanto # 0 e # 1. Uma boa chave de fenda vale o seu peso em ouro porque é menos provável danificar o parafuso ou desenvolver
uma
danificado ponta que não consegue segurar o parafuso em tudo.
Além disso, certifique-se que você tem na mão, uma chave de fenda normal de tamanho padrão e uma Phillips # 2, porque você é
apto a ser montagem / desmontagem de itens comuns porte, bem como aqueles em miniatura. Eu sugiro que você obter uma
catraca
Chave de fenda com um conjunto de bits diferentes, e você vai estar preparado para a maioria, se não todos os seus projetos.
Alicates e fio strippers
Mais uma vez, gastar o dinheiro em bons alicates e descascadores de fios, porque você começa o que você paga. Você
definitivamente precisa de um
bom par de alicate de bico (mostrado na Figura 4-3) que pode ser usado como pinças ou dobrar as peças para encaixar.
Figura 4-3. Alicate de bico
Você provavelmente pode sair sem um par de alicates regulares, embora eu não recomendo. Tome conta de
o seu alicate, e eles vão cuidar bem de você. É difícil de dobrar arame ou cortar os contatos com um par de alicates que têm
lacunas no-los ou não fechar corretamente.
Você também vai precisar de alguns strippers fio. Sim, você pode usar os cortadores ligados a seu alicate para marcar
cuidadosamente fio
isolamento e tira-lo, mas quando você tem que fazer isso repetidamente cada vez que você precisa de um terminal de cabos fica
entediante realmente
velozes. Obtenha algumas strippers de arame, e salve-se a dor de cabeça. Ou o tipo mostrado na Figura 4-4, ou do tipo mostrado
na Figura 4-5 será de trabalho apenas a certeza de que você sabe como usá-los.
Capítulo 4 ■ Electronics em 100 MPH
Figura 4-4. Strippers fio, versão 1
Figura 4-5. Strippers fio, versão 2
Eu realmente usar os dois, porque embora eu apreciar a possibilidade de escolher o meu tamanho do fio do par mostrado na
Figura 4-4,
Eu muitas vezes deparamos com fio estranho porte que não se encaixa em qualquer um dos furos pré-feitos sob medida da
modelo. É aí que as strippers
mostrado na Figura 4-5 entram em jogo.

Cortadores de fio
Você vai precisar de dois tipos de cortadores: Cortadores regulares (Figura 4-6) e cortadores finos (Figura 4-7).

Capítulo 4 ■ Electronics em 100 MPH


Figura 4-6. Os cortadores de fio
Figura 4-7. Cortadores de Belas fio
Os cortadores de tamanho normal são grandes para o trabalho todos os dias, mas os cortadores menores são de valor inestimável
quando você tem que
snip minúsculas juntas de solda quebrada ou as pontas desfiadas de # 24 bitola.

Arquivos
Você não vai precisar de nada extravagante quando se trata de arquivos-apenas um conjunto de arquivos pequenos com diferentes
cortes, ou aspereza. o
cortes mais finos podem ser usados para tornar áspera uma junta antes de soldá-la ou a remoção de um bocado de solda a partir de
uma extremidade do arame antes de
inseri-lo em uma placa de ensaio, enquanto os cortes mais ásperas pode ser usado para remodelar caixas de metal e plástico,
aumento
tamanhos de buracos, e várias outras tarefas.

Lupa Luz
Você estará trabalhando com lotes de objetos muito pequenos, de resistores de fios para conexões de servo, e seus olhos vão
começar
cansado rapidamente. Uma boa lâmpada de mesa ajustável com uma lupa construído em é um investimento extremamente
valioso. O que eu uso
é projetado para uso por joalheiros e beaders, e a diferença que faz quando eu estou tentando trabalhar com peças em miniatura
não pode ser exagerada. (Ver Figura 4-8.)

Capítulo 4 ■ Eletrônica em 100 MPH


Figura 4-8. Luz Lupa

Pistola de cola quente


Em algum momento, você vai precisar para manter as coisas para outras coisas, como um servo, ou de uma placa de circuito
impresso (PCB)
a plataforma de um robô-corpo e pode não ser viável a utilização de parafusos ou pernos. Uma das melhores maneiras de fazer
isso é com um
pistola de cola quente. Ignorar o estigma de scrapbooking e papel placa / projetos macarrão, e obter uma pistola de cola bom. Cola
quente
funciona surpreendentemente bem em todos os tipos de aplicações de madeira de plástico, plástico de plástico, de madeira e de
metal, e assim por diante.

Colas Assorted
Falando de cola, você provavelmente vai querer pegar uma variedade de colas outro, não cola quente. Cola-tudo é um deve-
tem (obter uma versão de marca, porém, não é uma marca de loja), como é a modelagem de cimento. Eu também tenho um
estoque de 5 minutos
epóxi e cimento de borracha e recentemente descoberto Gorilla Glue para ser uma das colas mais impressionante ainda. Você
também pode
encontrar um uso para esses paus-os-solda fria aqueles onde você misturar duas substâncias putty-like juntos para formar uma
"argila"
que endurece até uma consistência semelhante a de aço.
Adicionar "fita" para esta lista também; obter alguma fita adesiva transparente regular, um pouco de fita dupla face, fita adesiva,
elétrico
fita, e-tape do curso de conduta.

Multímetro
Um multímetro mede diferentes aspectos de um circuito de tensão elétrica através de determinados pontos, corrente e resistência.
(Ver Figura 4-9.) Se você obter um análogo ou uma versão digital é com você, mas estar preparado para gastar um pouco de
dinheiro,
porque um bom multímetro é uma ferramenta incrivelmente valiosa. Ele pode ser usado para rastrear curtos elétricos, verifique se
você está
usando a voltagem correta, e descobrir o quanto a resistência existe entre dois pontos em um circuito.
Capítulo 4 ■ Eletrônica em 100 MPH
Figura 4-9. Analógica e multímetros digitais (© www.digimeter.com)
Ao escolher o seu multímetro, verifique se ele pode medir ambos os níveis de tensão AC e DC, porque é provável
você estará usando ambos em algum ponto. Deve ser capaz de medir a resistência e continuidade, bem como de corrente. A
maioria
característica importante procurar, no entanto, é a facilidade de utilização. Se você não sabe como usar o multímetro, você não vai
usá-lo, e você estaria perdendo uma ferramenta importante. Portanto, obter um que você gosta, que faz sentido para você, e, em
seguida, passar algum tempo
com a aprendizagem manual de como usá-lo.

Suprimentos de energia
Quando se trata de alimentar suas experiências e projetos, há algumas rotas diferentes que você pode tomar. Obviamente,
muitas vezes você vai estar usando pilhas ou baterias, e eu vou falar sobre aqueles para cada projeto específico. No entanto,
quando
trata de alimentar um protótipo ou apenas determinar se uma determinada configuração funciona, você não pode ir mal com uma
parede
Conversores AC-CC, que vêm com dispositivos eletrônicos quase todos estes dias a verruga-.
Você pode obter uma verruga parede ajustável em uma loja de eletrônicos, que eu recomendo, mas você também pode assombrar
o seu local de
brechó. Em algum lugar, enterrado nas costas pelo sistema eletrônico, você pode encontrar uma caixa cheia de fontes de
alimentação abandonados,
por cerca de um dólar cada. Você pode cortar o conector para que você possa ligá-lo diretamente em sua placa de ensaio ou obter
um adaptador como o da Figura 4-10.

Capítulo 4 ■ Eletrônica em 100 MPH


Figura 4-10. Adaptador de tomada de alimentação
Tenho tendência para pegar suprimentos de energia sempre que eu vê-los ou mantê-los quando eu jogar um dispositivo afastado
em casa,
então eu tenho uma boa variedade. Tente encontrar pelo menos um de 9V e um 12V, com diferentes classificações atuais, porque
estes são
fontes de tensão comum. Se o dispositivo ficar bem com a sua fonte de 12V, por exemplo, isso significa que ele provavelmente
vai correr bem
em seu carro.

Placa de ensaio
A placa de ensaio é outro must-have quando você está colocando eletrônica em conjunto para ver se tudo funciona como deveria.
Você pode ir full-out, com um modelo de luxo com conexões de energia e medidores e todos os tipos de sinos e assobios
(como mostrado na Figura 4-11).
Figura 4-11. Configuração placa de ensaio Prototipagem

Capítulo 4 ■ Eletrônica em 100 MPH


Ou você pode ir com uma versão mais antiga escola, como a mostrada na Figura 4-12.
Figura 4-12. Analog placa de ensaio
De qualquer maneira, só não se esqueça que você pode conectar dispositivos como resistores e ICs para ele, e que você pode
conectar esses dispositivos
usando fios de ligação. E como suas habilidades de aumentar e diversificar seus interesses, esteja preparado para a sua placa de
ensaio para
um dia parecido com a imagem na figura 4-13.
Figura 4-13. Montagem horrivelmente errado
Sim, você vai ser a depuração que conglomerado de fios, e não, eu não posso ajudá-lo. Mas eu sinto por você, eu realmente fazer.

Capítulo 4 ■ Eletrônica em 100 MPH

Faixa de poder
Você vai precisar de um filtro de linha, mas não precisa ser nada elaborado. É apenas uma boa idéia ter todo o seu
lâmpada eletrônica-desk, ferro de solda, Pi, e assim por diante-conectado a uma fonte de modo que você tem uma maneira
infalível para abortar
se você precisar. Um toque de um botão, e tudo se apaga. Obter um com um protetor contra surtos construído em se você puder.
Ferro de solda
Outra ferramenta crítica na sua lista deve ser um ferro de solda, e este é o único item que você não deve economizar em quando
se trata de custo. O ferro $ 9,99 você pode obter em sua loja de departamento local pode ser tudo certo para mexer com alguns
circuitos em torno da casa, mas quando você é um construtor séria / hobby, você precisa de uma boa qualidade, solda ajustável
ferro. I têm um WES51 Weller (mostrado na Figura 4-14).
Figura 4-14. Estação de solda
É facilmente o melhor $ 100 que eu já passei na minha carreira eletrônica. Obter um com um stand, calor ajustável, e dicas que
você
pode trocar. Confie em mim: os seus projetos vão agradecer-lhe quando você pode usar a temperatura correta para fazer a fusão
de solda
sem derreter o seu circuito, ou quando você pode usar o mesmo calor para remover uma junta de solda ruim.
Enquanto você está comprando para o ferro, obter alguns acessórios de solda também. Uma solda-otário (a vácuo à mão
bomba que remove solda derretida das articulações) é um must-have, como é uma ferramenta ajudando-as mãos. (Veja a Figura 4-
15).

Capítulo 4 ■ Eletrônica em 100 MPH


Figura 4-15. Ferramenta suporte e pinças.
Uma ferramenta suporte vem em muito útil quando você precisa de duas mãos para segurar uma conexão e outros dois
mãos para soldar a conexão e você queimou os dedos de sua esposa um muitas vezes e seu filho de nenhum lugar para
ser encontrado. Você pode até mesmo fazer o seu próprio fora de fio rígido de enfardamento, garras jacaré e um carrinho de
madeira.

Regras gerais de segurança


Aqui é quando eu começar a agir como sua mãe e perguntar se você está sendo seguro. Afinal, embora nós estamos construindo
relativamente
projetos inócuos neste livro, você ainda está lidando com alguns componentes que pode seriamente prejudicá-lo. A ponta de sua
ferro de solda, por exemplo, médias em torno de 450 ° F. Cola quente, mesmo a variedade de temperatura baixa, funde a cerca de
250 ° F. Certo,
Programação é uma atividade bastante inofensivo, mas você também vai ser corte, perfuração, lixar, e fazer qualquer número de
outros
tarefas que têm a capacidade de mal feri-lo. Então, por favor, tome essa conversa segurança a sério.
Trabalhando com calor
Tenha em mente o tempo todo que você está cercado por ferramentas e componentes que podem ficar muito quente, e que seria
convir que você lembre-se que esses são objetos e tratá-los adequadamente. Como mencionado anteriormente, o seu solda
ferro chega a cerca de 450 ° F. Mas também a solda que você está usando funde a cerca de 350 ° F, o que significa que a parte que
você acabou
soldadas é quente! Dê-lhe alguns segundos para esfriar antes de tocá-lo e ver se o seu conjunto é sólido. Espere até que seu cola
quente
arrefece para, pelo menos, um estado de gel-like antes de tocá-lo. Falando da experiência pessoal: a pior coisa de cola quente
é que você não pode simplesmente removê-la quando você obtê-lo preso ao seu dedo. Em vez disso, ele permanece ali mesmo em
seu dedo
e chia.

Capítulo 4 ■ Eletrônica em 100 MPH

Trabalhando com objetos pontiagudos


Isto deve ir sem dizer, mas é necessário seguir as boas práticas de segurança quando se trata de suas ferramentas de corte como
bem. Que significa
• Cortar longe de seu corpo.
• Mantenha suas ferramentas afiadas.
Cortar na sua direção, mesmo leve ou para um pequeno corte, é simplesmente pedindo para ter problemas. Um deslize com um X-
ACTO
faca e você poderia estar a cometer hara-kiri, ou, pelo menos, ir para a sala de emergência de pontos. Acreditar
me, pontos não são divertidos, especialmente quando o médico injeta um anestésico para o corte. E se você perder um dedo
completamente, robótica experimentação se tornará imediatamente, pelo menos, 10 por cento mais difícil, porque você vai ter
apenas nove dedos para trabalhar com mais do que 10 um imediato de 10 por cento corte.
Mantenha suas lâminas afiadas, porque, como qualquer chefe sabe, uma faca é uma faca perigosa. Se a sua lâmina de faca
está ficando maçante, mude-lo por um novo. A mesma coisa vale para a sua lâmina de faca X-ACTO. Uma lâmina maçante é
muito mais
propensos a escorregar e cortá-lo, enquanto uma faca afiada vai simplesmente cortar mais fundo no que quer que seja que você
está cortando as.

Usar óculos de segurança


Obter um par de óculos de segurança ou óculos de proteção. Isto não é negociável, se você não tem um par, obter um antes de
fazer qualquer
experimentando. Sua visão é demasiado importante para perdê-lo para um pontinho voar de metais a partir de seus recortes de
arame ou uma faísca de
seu rebolo. Se você tem um par que é desconfortável, obter outro par está mais propensos a usá-los se
eles são um ajuste confortável. Eu prefiro os óculos de segurança, mas muitas pessoas preferem os óculos de proteção que
mantenha rápido para a sua cabeça com
um elástico, uma vez que eles não vai cair. O que você preferir, cuidar deles para evitar arranhões e quebra, e
usá-los quando você está trabalhando.

Extintores no pronto
Deixe-me lhe contar uma pequena história. Quando eu estava construindo meu primeiro pequeno robô móvel com o Pi, eu estava
usando um polímero de lítio
(Lipo) bateria pela primeira vez. Era uma pequena bateria 11.1V, 1300mAh. Eu estava ligando-o aos meus servos motores, e eu
conseguiu curto os terminais negativos e positivos, juntamente com um jacaré.
Imediatamente após o alto pop! E a centelha, o pacote começou a esquentar incrivelmente rápido, e a embalagem
começaram a inchar. Pensando tão rápido quanto eu podia, eu consegui desligar o jacaré, deixou cair o pacote para o
meio do chão e jogou um copo de água sobre a bateria. Eu por pouco conseguiu escapar de uma explosão, e eu
Descobri mais tarde que as baterias LiPo embalar completamente um perfurador.
A moral desta história é que, embora eu usei um copo de água, eu tive um extintor de incêndio nas proximidades que eu estava
pronto
para usar se eu tinha precisava, e assim se você. Eles não são caros, e eles são bem vale o custo quando se trata de
possivelmente salvar sua casa ou oficina de um incêndio. Obter um extintor, e não se esqueça de mantê-la carregada.
Além disso, certifique-se de aprender a usar o seu extintor de incêndio antes de você precisar dele. Pense nisso como sendo como
o pulverizador do urso como
você está caminhando nos confins do Alasca e precisa se defender de um urso. Você iria praticar a usá-lo antes de ir
caminhadas, uma vez que pode ser extremamente difícil de ler as instruções durante a execução de um urso irritado. O seu
extintor de incêndio
é semelhante pode ser muito difícil de ler e seguir as instruções enquanto sua oficina está se transformando em um remake de
O Inferno Towering. Familiarize-se com ele, e espero que você nunca vai ter que usá-lo.
Mantenha um kit de primeiros socorros portátil.
Embora isto deve ir sem dizer, sempre tem um kit de primeiros socorros nas proximidades. Você não precisa de um nível 1 Kit de
Emergência completa
que você poderia assumir uma expedição à Antártida, mas um kit pequeno, bem abastecido deve estar em algum lugar nas
proximidades.
O kit deve conter alguns Band-Aids, álcool, cotonetes, e talvez algumas outras probabilidades e extremidades. É difícil
soldar uma placa quando você está sangrando por toda parte.

Capítulo 4 ■ Eletrônica em 100 MPH


Trabalhar em uma área ventilada
Um detalhe importante para se lembrar quando você está trabalhando é manter sua oficina bem ventilado, porque você vai
provavelmente será o lixamento, pintura, serrar, e fazendo várias outras atividades que podem encher o ar (e seus pulmões) com
substâncias perigosas. Você pode não ser pintar o suficiente para ser muito preocupado com fumos de pintura, mas você
definitivamente
ser em torno de solda fumaça, por exemplo. Solda contém chumbo não muito, mas alguns, e chumbo é venenoso. Se você
entrar em contacto com muito do que, muitas vezes, pode levar a intoxicação por chumbo. Os sintomas incluem dor abdominal,
confusão, dor de cabeça e irritabilidade. Em casos graves, pode levar a convulsões e até a morte, nem de que facilitam
novas experiências robótica.
Mesmo que você é improvável a entrar em contacto com o chumbo suficiente para envenenar a si mesmo enquanto solda, estar
ciente
que é tóxica. Não respirar os vapores, e lave bem as mãos e muitas vezes depois de tocar peças soldadas. Vocês
deve trabalhar em uma área bem ventilada, com as janelas abertas, ou pelo menos um fã indo. Alguns experimentadores ligar um
velho
ventilador do computador a uma mangueira secador-vent de uma solução fumo-away personalizado.

Organizando seu local de trabalho


Como você progride em seus empreendimentos experimentando através da compra de ferramentas adicionais, partes, chips,
placas, e assim por diante, você é
vai precisar de uma maneira de organizar tudo. Mantendo a sua área de trabalho organizada poderia facilmente cair sob a
segurança, uma vez que
ter tudo armazenado ordenadamente em seu lugar pode eliminar os perigos no local de trabalho também.
No mínimo, comprar diversos tamanhos de sanduíche baggies de modo que você pode manter diferentes partes separadas, mas
quando
você passa o ponto de não retorno, olhar para soluções de armazenamento. Eu tive sorte na seção beading de minha locais
loja de artesanato, uma vez que muitos resistores e LEDs são aproximadamente do tamanho de pérolas. Minha memória principal
se parece com a imagem
na Figura 4-16.
Figura 4-16. Armazenamento Organizado partes

Capítulo 4 ■ Eletrônica em 100 MPH


E eu tenho várias outras caixas plásticas e gavetas para rodas, motores, baterias, ICs, e tudo o que eu preciso
armazenar. Mantendo nesse sentido, você pode observar os rótulos na imagem. Comprar um fabricante da etiqueta! Facilmente
outra de minha melhor
compras, você pode rotular gavetas, fontes de alimentação, cabos, os filhos. . . as possibilidades e os usos são infinitos.
Mantenha sua área limpa. Não só é muito mais eficiente para encontrar as coisas quando eles estão onde eles deveriam
ser, mas tropeçar em um cabo de alimentação quando segurando uma faca de X-ACTO pode ser um incidente perigoso. Obtenha
seu instrumento
ou parte de seu lugar, use-o, em seguida, colocá-lo de volta. (Esta é outra área onde você pode ter que fazer como eu digo, não
como eu faço.
Você estará vendo fotos da minha área de trabalho em todo o livro, e eu não posso garantir que vai ser sempre o espaço mais
puro. Eu
tendem a se espalhar para fora quando eu trabalho. Mas essa é a idéia.)

Bônus: Técnicas de solda

Nesta última seção deste capítulo introdutório eletrônica, vou dar-lhe algumas dicas sobre como soldar. Soldar é uma arte
tanto como uma habilidade, e faz exame da prática. Se você nunca soldadas antes, suas primeiras articulações são obrigados a ser
irregular,
aglomerados feio, mas melhora pode ser rápido se você ficar com ela. Não mais do que algumas horas passadas componentes de
solda
juntos para a prática pode fazer uma diferença enorme quando você faz isso para um projeto real.
Solda basicamente divide em quatro etapas: preparar suas superfícies, estanho, se necessário, ligar as partes,
e aquecê-los.
1.
Prepare as suas superfícies. Se você está conectando fios a outros fios ou para outro à superfície
Retire o material isolante da última meia polegada ou assim e torcer os fios juntos para fazer
um grupo compacto. Outras peças de metal podem ter de ser limpos, e se for um particularmente
superfície lisa, desbaste com lixa pode ajudar a solda ficar melhor para ele.
2.
Então, se necessário. Limpar uma superfície é simplesmente derretendo um pouco de solda para ele antes de ficar
que a outra superfície. É uma boa prática para entrar ao prender arame para uma perna IC, para
exemplo. Um fio de estanho, aquecê-lo a partir do fundo com o ferro de solda, e mantenha a solda
para o topo. Quando o fio fica quente o suficiente, a solda irá derreter a direita nele.
3.
Conecte as peças. Se for possível, ligar as partes fios mecanicamente-twist juntos, envoltório
fios em torno de uma perna de IC, e assim por diante. Se isso não for possível, é onde suas mãos ajudando-
ferramenta entra em jogo a usá-lo para segurar as peças juntas.
4.
Aqueça as peças. Com um limpa ponta do ferro de solda, aqueça o conjunto, mantendo a solda a ele.
Quando a conexão aquece o suficiente, a solda irá derreter e fluir para a articulação.
O último passo é provavelmente o mais importante. A ponta do seu ferro devem estar limpas; adquirir o hábito de limpá-lo
em uma esponja úmida sempre que você terminar uma articulação, e antes de iniciar outra. Uma dica limpo irá transferir o calor
melhor.
Também deve aquecer o conjunto, não a solda. Não derreter a solda para a ponta do ferro de engomar e, em seguida, para que
manchar
a conexão, pois você corre o risco de fazer uma junta de solda fria (mostrado na Figura 4-17), que está fadado ao fracasso
eventualmente. Lembre-se: aquecer as partes, e não o de solda. Se você tiver problemas para obter a quente conjunta suficiente
para a solda
para derreter para ele, você pode derreter um pouco de solda na ponta do seu ferro antes de tocar em uma articulação, desde a
solda
transferir o calor de forma mais eficaz. Você deve acabar com uma junta que se parece com o mostrado na Figura 4-18.

Capítulo 4 ■ Eletrônica em 100 MPH


Figura 4-17. A junta de solda fria. Observe a má conexão
Figura 4-18. Uma boa junção da solda
Mais uma vez, não se estresse demais sobre suas habilidades de solda ou a falta dela. Um pouco de prática e você estará de solda
circuitos como um especialista.
Com exceção de apenas fazê-lo, talvez a melhor maneira de aprender a soldar bem é para assisti-lo, e a magia do YouTube agora
torna isso possível. Uma rápida pesquisa de "como solda" traz mais de 300.000 resultados. Eu não posso escolher qualquer dois
ou três que
destacam-se, mas se você prestar atenção a alguns que você deve pegar a idéia. Makezine, um blog on-line incrivelmente
informativo, tem uma boa
A página com os recursos sobre aprender a soldar. Ele está localizado no http://makezine.com/2006/04/10/how-to-solder-
Recursos /.

Resumo
Depois de ser apresentado a alguns princípios básicos de eletricidade, você aprendeu o caminho de volta alguns dos comum
ferramentas de eletrônicos no laboratório, e aprendeu o básico de como usá-los de forma segura. Eu também apresentei a solda e
apontou na direção de alguns recursos para aprender a fazê-lo melhor.
Vamos juntar nossas ferramentas e cabeça nos projetos, começando com um simples que não requer quaisquer ferramentas.
WebBot.
Capítulo 5
O Web Bot
Como qualquer um que tenha passado algum tempo em tudo on-line pode lhe dizer, há uma grande quantidade de informação
disponível na Internet.
De acordo com índices do Google, a partir de 2013, há 4,04 bilhões de páginas da web em existência. (Ver Figura 5-1.) Claro, um
monte
dessas páginas são, provavelmente, imagens do gato e pornografia, mas também há centenas de milhões de páginas com
informações sobre eles. Útil informações. Tem sido dito que cada pedaço de informação que foi digitalizado
existe em algum lugar na internet. Ele só tem que ser encontrado, não é uma tarefa fácil quando a Internet é algo
como a Figura 5-1.
Figura 5-1. Mapa visual da Internet (© 2013 http://internet-map.net, Ruslan Enikeev)

Capítulo 5 ■ O Web Bot


Infelizmente, não há nenhuma maneira qualquer pessoa poderia baixar e ler todas as informações que ele ou ela encontrou
interessante. Os seres humanos não são apenas tão rápido, e nós temos que comer e dormir e realizar todos os tipos de ineficiente,
às vezes desagradável, tarefas como tomar banho e trabalhar para viver.
Felizmente, podemos programar computadores para fazer algumas das tarefas repetitivas, chatas que não necessita de realizar
nós mesmos. Esta é uma das funções de um bot web: nós podemos programar o bot para rastrear páginas da web, seguindo os
links e
download de arquivos como ela vai. É comumente chamado apenas de um "bot", e saber como programar e usar um pode ser um
habilidade extremamente útil. Precisa os relatórios de ações quando você acorda de manhã? Ter o seu bot rastrear o internacional
índices e tem uma planilha esperando por você. Precisa pesquisar todas as listas de passageiros para a White Star Line
que foram publicadas on-line, à procura de seu antepassado? Ter o seu início bot com "White Star" no Google, e atravessar
todas as ligações a partir de lá. Ou talvez você quer localizar todos os manuscritos de Edgar Allan Poe que estão disponíveis no
momento
no domínio público; um bot pode ajudar com isso também, enquanto você dorme.
Python é bem adequada para fazer o trabalho de um bot web, também chamado neste contexto, uma aranha. Há alguns
módulos que precisam ser baixados, e então você pode programar um bot totalmente funcional para fazer o seu lance, começando
a partir de qualquer página que você dá. Porque atravessando páginas web e download de informações não é um terrivelmente
-processador tarefa intensiva, é também uma tarefa bem adequada para o Pi framboesa. Enquanto sua máquina desktop normal,
lida com tarefas de computação mais difíceis, o Pi pode lidar com o levantamento luz necessária para baixar páginas web, analisar
seu texto, e siga os links para download de arquivos.

Bot Etiquette
Um fator que você precisa para manter em mente, você deve construir um web crawler funcionando, é bot etiqueta. Eu não quero
dizer
etiqueta no sentido de garantir que mindinho do bot é estendido quando beber chá. Pelo contrário, há certa
sutilezas você deve observar quando você programar o seu bot para rastrear sites.
Uma é a de respeitar o arquivo robots.txt. A maioria dos sites tem esse arquivo no diretório raiz do site. É um arquivo de texto
simples
que contém instruções para visitar bots e aranhas. Se o proprietário do local não quer determinadas páginas rastejou
e indexado, ele pode listar essas páginas e diretórios no arquivo de texto, e robôs cortês irá aderir aos seus pedidos.
O formato do arquivo é simples. Parece que este:
Agente de usuário: *
Proibir: / examples /
Proibir: /private.html
Este arquivo robots.txt especifica que não bots (User-agent: *) pode visitar (crawl) quaisquer páginas na / examples / pasta,
nem eles podem visitar a página de private.html. O arquivo robots.txt é um mecanismo padrão por sites que web pode
restringir visitas a determinadas páginas. Se você quiser que o seu bot para ser bem-vindo em todos os locais, é uma boa idéia
seguir essas regras.
Vou explicar como fazer isso. Se você optar por ignorar essas regras, muitas vezes você pode esperar que o seu bot (e todas as
visitas do seu
Endereço IP) para ser banido do site em questão.
Outra peça de etiqueta é controlar a velocidade de pedidos de informação do seu bot. Porque bots são computadores,
eles podem visitar e download de páginas e arquivos de centenas e milhares de vezes mais rápido do que os seres humanos
podem. Por esta razão,
é inteiramente possível para um bot para fazer tantas solicitações para um site em um curto espaço de tempo tal que pode
incapacitar um mal
servidor web configurado. Portanto, é educado para manter solicitações de página do seu bot a um nível administrável; a maioria
dos proprietários do site
são muito bem com cerca de 10 pedidos de página por segundo, muito mais do que pode ser feito à mão, mas não o suficiente
para trazer para baixo
um servidor. Mais uma vez, em Python, isso pode ser feito com uma função de descanso simples ().
Por fim, que muitas vezes pode ser problemático para falsificar sua identidade user-agent. A identidade do usuário-agente
identifica os visitantes
um site. Navegadores Firefox tem um certo user-agent, o Internet Explorer tem outra, e robôs têm ainda outra. por que
existem muitos sites que não querem bots para visitar ou rastrear suas páginas no total, cerca de bot-escritores dão a seus bots um
-agent usuário fraudulento, para torná-lo parecido com um navegador web normal. Isso não é legal. Você pode nunca ser
descoberto,
mas é uma questão de decência comum, se você tivesse páginas que você queria privado, você quer que os outros a respeitar os
pretende como bem. Faça o mesmo para outros proprietários do site. É apenas parte de ser um bom bot-escritor e internauta. Você
pode
simular user-agent do navegador, se você está a emular um navegador para outros fins, tais como teste de site ou para encontrar e
arquivos de download (PDFs, mp3s, e assim por diante), mas não para rastrear esses sites.

Capítulo 5 ■ O Web Bot


As conexões da Web
Antes de chegarmos ao negócio de programação da nossa aranha, você precisa entender um pouco sobre como a Internet
opera. Sim, é basicamente uma rede de computador gigante, mas que a rede segue certas regras e usa certos protocolos,
e precisamos de utilizar esses protocolos, a fim de fazer qualquer coisa na web, incluindo o uso de uma aranha.
Web Protocolos de Comunicação
HyperText Transfer Protocol (HTTP) é o formato em que o tráfego da web mais comum é encapsulado. Um protocolo é
simplesmente um acordo entre duas partes que se comunicam (neste caso, computadores) sobre a forma como a comunicação
é para continuar. Ele inclui informações como os dados são tratados, como determinar se ocorreram erros
durante a transmissão (e como lidar com esses erros), como a informação é viajar entre a fonte e
destino, e como essa informação é formatado. O "http" na frente da maioria das URLs (Uniform Resource Locator)
define o protocolo utilizado para solicitar a página. Outros protocolos comuns usados são IP (Control TCP / Transmissão
Protocol / Internet Protocol), UDP (User Datagram Protocol), SMTP (Simple Mail Transfer Protocol) e FTP (File
Transfer Protocol). Qual o protocolo é utilizado depende de fatores tais como o tipo de tráfego, a velocidade dos pedidos,
se os dados correntes precisam ser servido em ordem, e como indulgente de erros destes fluxos pode ser.
Quando você solicita uma página web com o browser, não há um bom bocado acontecendo nos bastidores. Vamos dizer que você
escreva http://www.irrelevantcheetah.com em sua barra de localização. O seu computador, sabendo que ele está usando o HTTP
protocolo, envia primeiro www.irrelevantcheetah.com ao seu DNS local (Domain Name System) do servidor para determinar a
o Internet endereço pertence. O servidor DNS responde com um endereço IP, digamos, 192.185.21.158. Essa é a
endereço do servidor que mantém as páginas da web para esse domínio. Aborda o Nome de Domínio mapas do sistema IP para
nomes, porque é muito mais fácil para você e me lembrar "www.irrelevantcheetah.com" que é para lembrar
"192.185.21.158."
Agora que o seu computador sabe o endereço IP do servidor, ele inicia uma conexão TCP com o servidor, usando um
três vias "aperto de mão." O servidor responde, e pede seu computador para a página de "index.html." O servidor responde
e, em seguida, fecha a conexão TCP.
Seu navegador em seguida, lê o código na página e apresenta-o. Se existem outras partes da página que necessita, tais
como código PHP ou imagens, em seguida, solicita que as referidas peças ou imagens a partir do servidor e exibe-los também.
Formatos de página Web
A maioria das páginas da web são formatadas em HTML-HyperText Markup Language. É uma forma de XML (eXtensible
Markup Language)
que é bastante fácil de ler e analisar, e isso pode ser entendido pela maioria dos computadores. Navegadores são programados
para
interpretar a linguagem das páginas e exibir essas páginas em uma determinada maneira. Por exemplo, o par de tags <html>
e </ html> indicar que a página está em HTML. <i> e </ i> indicam que o texto é fechado em itálico, enquanto <a> e
</a> indicar um hyperlink, que normalmente é exibido como azul e sublinhado. JavaScript é rodeado por
<script type = "text / javascript"> </ script> marcas, e várias outras tags mais envolvidos cercar vários idiomas
e scripts.
Todas essas marcas e formatos tornar a navegação e leitura de páginas da web matérias fácil para os seres humanos. No entanto,
eles têm o
efeito também tornando mais fácil para os computadores para analisar essas páginas. Afinal, se o seu navegador não poderia
decodificar as páginas,
a Internet não existiria na sua forma atual. Mas você não precisa de um navegador para solicitar e ler páginas web-only
para exibi-los uma vez que você tem deles. Você pode escrever um script para solicitar páginas da web, lê-los, e fazer pre-scripted
tarefas com informações em todas as páginas ", sem a interferência de um ser humano. Assim, você pode automatizar o longa,
processo chato de procurar ligações específicas, páginas e documentos formatados e passá-lo para o seu Pi. Aí reside
o bot web.

Capítulo 5 ■ O Web Bot


A pedido Exemplo
Para simplificar, vamos começar por dizer que temos solicitou a página http://www.carbon111.com/links.html.
O texto da página é bastante simples., uma página estática, afinal de contas, sem formulários web extravagantes ou conteúdo
dinâmico, e parece
muito parecido com este:
<HTML>
<HEAD>
<TITLE> links.html </ TITLE>
</ HEAD>
<FUNDO DO CORPO = "mainback.jpg" bgcolor = "# 000000"
TEXT = "# E2DBF5" link = "# EE6000" VLINK = "# BD7603" ALINK = "# FFFAF0">
<br>
<H1 align = "center"> Meus Sites e Recursos Favoritos </ H1>
<br>
<H2> Comix, Art Gallerys e Pontos de Interesse: </ H2>
<DL>
<DT> <A href=" http://www.alessonislearned.com/index.html "target="blank">
A lição é aprendida ... </A>
<Dd> Simplesmente incrível! Grandes idéias, grande execução. Eu amo a profundidade da humanidade
estes dois cavar. Não para o fraco de coração;)
e assim por diante, até que a marca de fechamento final </ HTML>.
Se uma aranha estavam recebendo esta página através de uma conexão TCP, seria primeiro aprender que a página é formatado em
HTML.
Seria, então, aprender o título da página, e que poderia começar a procurar um conteúdo) foi encarregado de encontrar (como
.mp3 ou .pdf
arquivos) e b) os links para outras páginas, que estarão contidos dentro de tags <A> </A>. Uma aranha também pode ser
programado
a seguir os links para uma certa "profundidade"; em outras palavras, você pode especificar se ou não o bot deve seguir links de
Páginas ligadas ou se deve parar de seguir os links após a segunda camada. Esta é uma questão importante, porque
é possível que se você programar muitas camadas, sua aranha poderia acabar por arrasto (e download) o inteiro
Internet de um problema crítico se a sua largura de banda e armazenamento são limitadas!

Nosso conceito Web Bot


O conceito por trás do nosso bot web é o seguinte: vamos começar com uma determinada página, com base na entrada do usuário.
Então nós vamos
determinar quais arquivos estamos procurando, por exemplo, estamos procurando arquivos .pdf de obras em domínio público ou
.mp3s livremente disponíveis por nossas bandas favoritas? Essa escolha será programado no nosso bot bem.
O bot irá iniciar na página de início e analisar todo o texto na página. Ele vai olhar para o texto contido
dentro <a href> </a> etiquetas (hyperlinks.) Se esse hyperlink termina em ".pdf" ou ".mp3" ou outro tipo de arquivo escolhido,
vamos
fazer uma chamada para wget (uma ferramenta de descarga de linha de comando) para baixar o arquivo para o nosso diretório
local. Se não podemos encontrar qualquer
links para o nosso tipo de arquivo escolhido, vamos começar a seguir os links que nós não encontrar, repetindo o processo para
cada um desses links,
como forma recursiva como nós determinar de antemão. Quando temos ido tão longe como nós queremos, devemos ter um
diretório cheio de
arquivos, para ser examinada no nosso lazer. Isso é o que um bot web é para-deixar o computador fazer o trabalho ocupado,
enquanto saboreia
uma margarita e espera para desfrutar os frutos do seu trabalho.

Capítulo 5 ■ O Web Bot


Analisando Páginas da Web
De análise refere-se ao processo de um computador atravessa quando se "lê" uma página web. No seu mais básico, uma página
web é
nada mais do que um fluxo de dados, que consiste em bits e bytes (um byte tem oito bits) que, quando decodificado, números de
formulário,
letras e símbolos. Um bom programa de análise não só pode voltar a formar esse fluxo de dados para os símbolos corretos, ele
pode ler
o fluxo de re-formado e "entender" o que ele lê. Um bot web precisa ser capaz de analisar as páginas que ele carrega, porque
essas páginas pode / deve conter links para as informações que está programado para recuperar. Python tem vários texto diferente
módulos disponíveis do analisador, e encorajo-vos a experimentar, mas o que eu ter encontrado o mais útil é Beautiful Soup.
■ Nota Beautiful Soup é nomeado após a canção de a Falsa Tartaruga por Lewis Carroll (1855):
Sopa bonita, tão rico e verde
Espera em uma terrina quente!
Quem para essas guloseimas não se rebaixaria?
Sopa da noite, a bela sopa!
Sopa da noite, a bela sopa!
Linda Soup (a biblioteca Python) passou por várias versões; como esta escrito, é na versão 4, que
funciona no 2.x do Python e 3.x.
Sintaxe bonita da sopa é bastante básico. Uma vez que você instalou-o digitando
sudo apt-get install python-BS4
você pode começar a usá-lo em seus scripts. Abra um prompt de Python digitando python e tente digitar o seguinte:
importação BeautifulSoup
Se você receber uma mensagem de erro que diz: "Não módulo chamado BeautifulSoup", você provavelmente está usando a
versão beta
Sopa de Bela 4 (BS4) -a versão padrão como esta escrito. Nesse caso, o tipo
BS4 de importação BeautifulSoup
Em seguida, continuar a escrever:
re importação
doc = ['<html> <head> <title> Título da página </ title> </ head>',
'<body> <p id = "firstpara" align = "center"> Este é o nº <b> um </ b>.',
'<p id = "secondpara" align = "blah"> Este é o nº <b> duas </ b>.',
'</ html>']
sopa = BeautifulSoup (''. join (doc)) # isso é dois apóstrofos, um após o outro, e não aspas duplas
Isso carrega o arquivo chamado doc com o que um fluxo de web-página seria semelhante a longa corrente única de caracteres.
Então sopa carrega as linhas em um arquivo que pode ser analisado pela biblioteca. Se você tivesse que digitar sopa de impressão,
neste ponto,
olharia o mesmo que os resultados de impressão digitando doc. No entanto, se você digitar
soup.prettify print ()
você será recompensado com a página, refeito de uma forma mais legível. Este é apenas um exemplo do que Beautiful Soup
pode fazer; Eu vou passar por isso mais quando chegarmos a programação do bot.

Capítulo 5 ■ O Web Bot


Como um aparte: o módulo re importar no exemplo anterior é usado para avaliar expressões regulares no texto.
As expressões regulares, se você não estiver familiarizado com eles, são uma maneira extremamente versátil para pesquisar o
texto e escolher
cordas para fora e seqüências de caracteres de maneiras que podem não ser imediatamente óbvio para um leitor humano. Um
regular
expressão termo pode parecer jargão completo; um bom exemplo de uma expressão regular é a sequência (<= -?) \ w +,
que procura por uma seqüência de caracteres em uma seqüência que segue um hífen. Para testá-lo, abra um prompt Python por
digitação python e, em seguida, tipo
re importação
m = re.search ('(<= -?) \ w + "," pássaro-free')
m.group (0)
e você será recompensado com o "pássaro".
Enquanto as expressões regulares são muito útil em termos de encontrar seqüências de caracteres no texto e cordas, eles são
também não é muito intuitivo e estão muito além do escopo deste livro. Nós não passar muito tempo com eles aqui. É do
o suficiente para que você sabe que eles existem, e você pode gastar algum tempo aprendendo sobre eles, se eles lhe interessar.

Codificação com módulos Python


Quando se trata de usar diferentes módulos Python quando codificar sua teia de aranha, você tem algumas opções. Muitos
open-source aranhas já existem, e você pode tomar emprestado daqueles, mas é uma boa experiência de aprendizagem para
codificar o
aranha a partir do zero.
Nossa aranha vai precisar fazer várias coisas, a fim de fazer o que precisamos que ele. Ele terá de iniciar conexões TCP
e páginas de solicitação, analisar as páginas recebidas, download de arquivos importantes que ele encontra, e seguir os links que
se trata
através. Felizmente, a maioria destes são tarefas muito simples, por isso a nossa programação aranha deve ser relativamente
simples.
Usando o módulo Mecanizar
Provavelmente, o módulo mais usado quando se trata de navegação na web automatizado, mecanizar é incrivelmente simples e
incrivelmente complexo. É simples de usar e pode ser configurado com algumas linhas insignificantes de código, no entanto,
também é embalado com características
que muitos usuários não utilizam plenamente. É uma ótima ferramenta para automatizar tarefas como testes de web-site: se você
precisa se logar em um
local 50 vezes, com 50 combinações de usuário / senha diferentes, e, em seguida, preencher um formulário de endereço depois,
mecanizar
é a sua ferramenta de escolha. Outra coisa agradável sobre ele é que ele faz muito do trabalho, tais como o início de conexões
TCP e
negociar com o servidor web, por trás das cenas para que você possa se concentrar na parte de baixar.
Para usar mechanize em seu script, você deve primeiro fazer o download e instalá-lo. Se você tem seguido ao longo, você ainda
ter aberto um prompt de Python, mas você vai precisar de uma interface de linha de comando normal para este download e
instalação
processo. Aqui você tem duas opções: você pode sair do modo de entrada de Python, ou você pode abrir outro terminal
sessão. Se você preferir ter apenas uma sessão terminal aberto, saia do prompt do Python em sua janela atual por
digitando Ctrl + d, que irá voltar para o prompt de terminal normal. Por outro lado, se você optar por abrir outro
sessão de terminal, você pode deixar a sessão em execução Python, e tudo que você digitou até agora ainda estará na memória.
Independentemente da opção que você decidir, a partir de um prompt de linha de comando, digite
wget http://pypi.python.org/packages/source/m/mechanize/mechanize-0.2.5.tar.gz
quando isso terminar o download, descompacte o arquivo com
tar -xzvf mecanizar-0.2.5.tar.gz
e navegue para a pasta resultante, digitando cd. Em seguida, execute
sudo python setup.py install
Siga as instruções na tela, e mecanizar será instalado e pronto para uso.

Capítulo 5 ■ O Web Bot


Analisando com Beautiful Soup
Eu mencionei a análise anterior; Beautiful Soup ainda é o melhor caminho a percorrer. Se você não tiver feito isso, insira
sudo apt-get install python-BS4
em um terminal e deixar que o gerenciador de pacotes fazer o seu trabalho. Ele está pronto para usar imediatamente depois. Como
eu disse antes,
uma vez que você baixar a página, Beautiful Soup é responsável por encontrar ligações e passá-los para a função usaremos
para download, bem como deixando de lado os links que serão seguidas mais tarde.
Como resultado disto, no entanto, verifica-se que o trabalho de encontrar ligações e determinar o que torna-se baixar
principalmente um problema com cordas. Em outras palavras, links (e o texto contido dentro delas) são nada além de cordas, e
em nossa busca para desvendar esses laços e segui-los ou transferi-los, nós vamos estar fazendo um monte de trabalho com
seqüências de trabalho
que vão desde lstrip (removendo o caractere mais à esquerda) para anexar para dividir e vários outros métodos da
biblioteca string. Talvez a parte mais interessante de um bot web, afinal de contas, não são os arquivos que baixa; sim, é o
manipulações que você tem que fazer para chegar lá.
Baixando com a Biblioteca urllib
A última parte do quebra-cabeça aqui é o urllib biblioteca especificamente, sua função URLopener.retrieve (). Esta função é
usado para baixar arquivos, sem problemas e sem espalhafato. Vamos passar o nome do nosso arquivo e deixá-lo fazer seu
trabalho.
Para usar urllib, primeiro você deve importá-lo. Mudar para o terminal com seu prompt Python, se ele ainda está aberta, ou de
início
outra sessão digitando python. Em seguida, digite
urllib importação
para torná-lo disponível para uso.
A biblioteca urllib usa a seguinte sintaxe:
image = urllib.URLopener ()
image.retrieve ("http://www.website.com/imageFile.jpg", "imageFile.jpg")
onde o primeiro parâmetro enviado para a função URLopener.retrieve () é a URL do arquivo, e o segundo
parâmetro é o nome do arquivo local que o arquivo será salvo como. O segundo, o parâmetro de nome de arquivo obedece
arquivo Linux e
convenções de diretório; se você lhe dá o parâmetro "../../imageFile.jpg", imageFile.jpg será salvo duas pastas
-se na árvore de diretórios. Da mesma forma, passando o parâmetro "as fotos / imageFile.jpg" irá salvá-lo na pasta de fotos no
interior
do diretório atual (a partir do qual o script é executado). No entanto, a pasta já deve existir; recuperar () não
criar o diretório.

Decidir o que fazer download


Isso pode obter tipo de pegajoso, porque não é tanta coisa lá fora. Infelizmente (ou felizmente, dependendo do seu ponto
de vista), um bom negócio do que é protegido por direitos autorais, por isso mesmo se você encontrá-lo gratuitamente, ele
realmente não é legal apenas para fazer o download. Tanto faz
você está procurando está lá fora.
Isso, no entanto, é o tema para um livro completamente diferente. Por enquanto, vamos supor que você está indo ser
à procura de informações livremente disponíveis, como todas as obras de Mark Twain, que são do domínio público. Que significa
você provavelmente vai estar à procura de .pdf, .txt, e possivelmente até mesmo .doc ou .docx arquivos. Você pode até querer
ampliar
os parâmetros de pesquisa para incluir .mobi (Kindle) e arquivos .epub, bem como .chm. Estes são todos os formatos de arquivos
legítimos
que pode conter o texto de livros que você está procurando.

Capítulo 5 ■ O Web Bot


Escolher um ponto de partida
A próxima coisa que você vai precisar é um ponto de partida. Você pode estar inclinado a dizer apenas "Google !," mas com
dezenas de
milhões de resultados de pesquisa de uma simples busca por "Mark Twain", você provavelmente seria melhor ficar um pouco
mais
focado. Faça um pouco de bases de antemão, e salvar a si mesmo (e seu bot) horas de trabalho mais tarde. Se você puder
encontrar um
arquivo online de obras de Twain, por exemplo, que seria um excelente ponto de partida. Se você está à procura de música livre
de downloads, você pode querer obter uma lista em conjunto de blogs que apresentam novos arquivos de música de up-and-
coming bandas,
porque muitos novos artistas canções dar afastado para fazer o download gratuito nesses blogs, a fim de promover a si e sua
música. Da mesma forma, documentos técnicos que lidam com especificações IEEE rede provavelmente pode ser encontrada em
uma técnica
local, ou mesmo um governo, com muito mais sucesso do que uma ampla pesquisa Google.
Armazenar seus arquivos
Você também pode precisar de um lugar para armazenar seus arquivos, dependendo do tamanho do cartão SD do seu Pi. Esse
cartão atua tanto como RAM
e um lugar para armazenamento de arquivos, por isso, se você estiver usando um cartão de 32 GB, você vai ter muito espaço para
arquivos .pdf. No entanto, um cartão de 4-GB
pode encher-se muito rapidamente se você estiver baixando arquivos de filmes documentais livre. Então você vai precisar de um
disco rígido externo USB
drive-quer um disco rígido full-blown ou uma unidade flash menor.
Mais uma vez, este é o lugar onde alguma experimentação pode vir a calhar, porque algumas unidades externas não vai funcionar
bem com
o Pi Raspberry. Porque eles não são particularmente caros nos dias de hoje, gostaria de comprar um ou dois queridos médias e
dar-lhes uma tentativa. Atualmente estou usando uma unidade de 8 GB flash Dane-Elec (mostrado na Figura 5-2), sem quaisquer
problemas.
Figura 5-2. Flash drive comum para armazenar arquivos
(Uma nota sobre como acessar sua unidade de salto através da linha de comando: uma unidade ligada, como uma unidade flash
está acessível
no diretório / media; isso é,
cd / media
poderá ir para o diretório onde você deve ver sua unidade listada. Você pode então navegar nele e acessar sua
conteúdo. Você vai querer configurar seu script Python para salvar arquivos em que Directory- / media / PENDRIVE, por
exemplo,
ou / media / EnglebertHumperdinckLoveSongs. Provavelmente a maneira mais fácil de fazer isso é para salvar seu script em um
webbot.py
diretório em seu disco rígido externo, e depois executá-lo de lá.)

Escrevendo o Python Bot


Vamos começar a escrever alguns Python. O código a seguir importa os módulos necessários e usa a versão de Python de entrada
(raw_input) para obter um ponto de partida (para o qual eu tenho anexado o "http: //" encontrados em cada endereço web). Em
seguida, inicia
um "navegador" (com aspas) com mechanize.Browser (). Este código, em sua forma final concluída, está listada no final de
este capítulo. Também está disponível para download como webbot.py no site da apress.com.

Capítulo 5 ■ O Web Bot


Para iniciar o processo de escrever o seu bot, use seu editor de texto (ou Leafpad ou nano) e começar um novo arquivo, chamado
webbot.py. Digite o seguinte:
BS4 de importação BeautifulSoup
mecanizar importação
tempo de importação
urllib importação
import string
start = "http: //" ("Onde você gostaria de começar a procurar \ n") + raw_input
BR = mechanize.Browser ()
r = br.open (iniciar)
html = r.read ()
Mais tarde, pode precisar de um falso agente de usuário, dependendo dos sites que visitamos, mas este código irá trabalhar para
agora.
Lendo uma String e extrair todos os links
Uma vez que você tem um objeto de navegador, que é chamado br no código anterior, você pode fazer todos os tipos de tarefas
com ele.
Abrimos a página inicial solicitado ao usuário com br.open () e lê-lo em uma longa seqüência, html. Agora nós podemos
usar Beautiful Soup para ler essa seqüência e extrair todos os links de lá adicionando as seguintes linhas:
sopa = BeautifulSoup (html)
para ligação em soup.find_all ('a'):
print (link.get ('href'))
Agora você pode executar o script para experimentá-lo. Salvá-lo e fechá-lo. Abra uma sessão de terminal e navegue para a mesma
diretório no qual você criou webbot.py. Em seguida, digite
python webbot.py
para iniciar o programa e digite example.com quando ele pede por onde começar. Ele deve retornar o seguinte e, em seguida,
sair:
http://www.iana.org/domains/example
Você leu com sucesso o conteúdo de http://example.com, extraiu as ligações (há apenas um), e impresso
que apontam para a tela. Este é um começo impressionante.
O próximo passo lógico é instanciar uma lista de links, e acrescentar a essa lista sempre Beautiful Soup encontra outro
ligação. Você pode, então, iterar sobre a lista, abrindo cada link com outro objeto navegador e repetindo o processo.
Procurando por e download de arquivos
Antes de instanciar que lista de links, no entanto, há mais uma função, precisamos criá-lo que, na verdade,
procura e download de arquivos! Então, vamos procurar o código na página para um tipo de arquivo. Nós provavelmente deve ir
para trás e perguntar
que tipo de arquivo que estamos procurando, adicionando a seguinte linha de código no início do script, após a linha de partida:
filetype = raw_input ("Que tipo de arquivo que você está procurando? \ n")
Capítulo 5 ■ O Web Bot
■ Nota Caso você esteja se perguntando, o \ n no final do raw_input corda em ambos os casos é um retorno de carro.
Ela não fica impressa quando a linha é exibida. Em vez disso, ele envia o cursor para o início da próxima linha para
esperar
sua entrada. Não é necessário, ele só faz a saída de olhar um pouco mais bonita.
Agora que sabemos o que estamos procurando, à medida que acrescentamos cada link para a lista de nós pode verificar para ver
se é um link para um arquivo
que nós queremos. Se estamos à procura de arquivos .pdf, por exemplo, podemos analisar o link para ver se ele termina em pdf.
Se isso acontecer, nós vamos
chamar URLopener.retrieve () e baixar o arquivo. Então abra sua cópia do webbot.py novamente e substituir o de bloco de
código com o seguinte:
para ligação em soup.find_all ('a'):
linkText = str (link)
se filetype em linkText:
código de arquivo #download aqui
Você notará dois elementos neste pequeno trecho de código. Primeiro, o str (link) pouco foi acrescentado. Beautiful Soup
encontra cada link na página para nós, mas ele retorna como um objeto de link, que é uma espécie de sentido para código não-
Soup.
Nós precisamos convertê-lo em uma corda, a fim de trabalhar com ele e fazer todas as nossas manipulações astutas. Isso é o que
chamada
o método str () faz. Na verdade, Beautiful Soup fornece um método para fazer isso por nós, mas aprender a analisar uma
seqüência com
a função str () é importante aprender aqui. Por uma questão de fato, é por isso que usamos a seqüência de importação linha no
início do nosso código, para que possamos interagir com objetos de cadeia.
Em segundo lugar, uma vez que o link é uma string, você pode ver como podemos usar Python em chamada. Semelhante ao C # 's
String.Contains ()
método, chamada em Python simplesmente procura a cadeia para ver se ele contém a substring solicitado. Portanto, no nosso
caso, se estamos
à procura de arquivos .pdf, podemos procurar o texto do link para que substring, "pdf". Se ele tem, é um link em que estamos
interessados.
Testando o Bot
Para tornar a testar o nosso bot mais fácil, eu criar uma página no http://www.irrelevantcheetah.com/browserimages.html de usar
para
teste. Ele contém imagens, arquivos, links e várias outras guloseimas HTML. Usando esta página, podemos começar com algo
simples, como imagens. Então vamos modificar nosso código webbot.py e torná-lo parecido com este:
mecanizar importação
tempo de importação
BS4 de importação BeautifulSoup
import string
urllib importação
start = "http://www.irrelevantcheetah.com/browserimages.html"
filetype = raw_input ("Que tipo de arquivo que você está procurando? \ n")
BR = mechanize.Browser ()
r = br.open (iniciar)
html = r.read ()
sopa = BeautifulSoup (html)
para ligação em soup.find_all ('a'):
linkText = str (link)
fileName = str (link.get ('href'))
se filetype em filename:
image = urllib.URLopener ()
linkGet = "http://www.irrelevantcheetah.com" + fileName
FileSave = string.lstrip (fileName, '/')
image.retrieve (linkGet, FileSave)

Capítulo 5 ■ O Web Bot


Esta última seção do código que começa com o loop for requer alguma explicação, methinks. O loop for para
através de todos os links que Beautiful Soup encontrados para nós. Então linkText converte os links para cordas para que
possamos
manipulá-los. Em seguida, converter o corpo do link (o arquivo real ou página para a qual o link aponta) para uma string como
bem, e verificar para ver se ele contém o tipo de arquivo que estamos procurando. Se isso acontecer, nós acrescentá-la à URL
base do site, dando-
nos linkGet.
As duas últimas linhas tem que acontecer por causa da função de recuperar (). Como você se lembra, essa função leva dois
parâmetros: a URL do arquivo que está baixando, e o nome local que gostaríamos de salvar o arquivo. FileSave leva
o fileName encontramos anterior e remove o líder "/" do nome para que possamos salvá-lo. Se não fizéssemos
este, o nome que iria tentar salvar sob seria por exemplo- / images / flower1.jpg. Se tentássemos salvar
uma imagem com esse nome, Linux iria tentar salvar flower.jpg para a pasta / imagens, e em seguida, dar-nos um erro
porque a pasta / imagens não existe. Ao remover o líder "/", o nome se torna images / flower1.jpg,
e enquanto há uma pasta de imagens no nosso diretório atual (lembre-se que eu disse sobre a criação do diretório
em primeiro lugar), o arquivo vai economizar sem incidentes. Finalmente, a última linha de código faz a descarga real, com os
dois
parâmetros já mencionei: linkGet e FileSave.
Se você criar um diretório de imagens no diretório atual e, em seguida, executar este script, respondendo "jpg" para o arquivo
Tipo de pergunta, o diretório de imagens devem encher-se com 12 imagens diferentes de flores. Simples, não é? Se, em vez disso,
você cria
um diretório de arquivos e resposta "pdf", você vai ter 12 (chato) PDFs diferentes na sua pasta de arquivos.
Criando diretórios e instanciar uma lista
Agora, existem mais dois recursos de que precisamos para adicionar para terminar este bot. Em primeiro lugar, não estamos
sempre indo para saber o que os diretórios
precisamos criar antes do tempo, por isso temos de encontrar uma maneira de analisar o nome da pasta a partir do texto do link e
criar o
diretório on the fly. Em segundo lugar, precisamos criar uma lista de links que apontam para outras páginas para que possamos,
em seguida, visitar aqueles
páginas e repita o processo de download. Se fizermos isso várias vezes, nós conseguimos um bot web real, seguindo os links
e download dos arquivos que queremos.
Vamos fazer a segunda tarefa de primeira instanciar a lista de links que mencionamos no final da seção que trata da
lendo cordas e extração de links. Podemos criar uma lista no início do script, após as declarações de importação, e
adicionar a ele como nós vamos. Para criar uma lista de nós simplesmente usar
LINKLIST = []
Para adicionar a ele, nós adicionamos um bloco elif ao nosso script:
se filetype em filename:
image = urllib.URLopener ()
linkGet = "http://www.irrelevantcheetah.com" + fileName
FileSave = string.lstrip (fileName, '/')
image.retrieve (linkGet, FileSave)
elif "htm" em filename: #covers ambos ".htm" e arquivos ".html"
linkList.append (link)
É isso aí! Se o nome do arquivo contém o tipo de ligação que está procurando, ele é recuperado. Se isso não acontecer, mas há
uma
"Htm" nele, ele é anexado ao LINKLIST-uma lista que podemos então percorrer, um por um, abrindo cada página e
repetindo o processo de download.
O fato de que nós vamos estar a repetir o processo de download muitas vezes deve fazer você pensar de um
elemento de codificação: uma função -também chamado de método. Lembre-se, uma função é usado no código, se há um
processo de
você vai estar a repetir uma e outra vez. Torna-se para código mais limpo, mais simples, e também é mais fácil de escrever.
Programmers, você encontrará, são pessoas muito eficientes. Se podemos codificá-lo uma vez e reutilizá-lo, isso é sempre muito
melhor do que
digitando-a uma e outra e outra vez. É também uma enorme economia de tempo.

Capítulo 5 ■ O Web Bot


Então, vamos começar a nossa função de descarga, adicionando as seguintes linhas para o nosso script webbot.py, após a
LINKLIST = []
linha nós adicionamos apenas um pouco atrás:
downloadFiles def (HTML, base, filetype, filelist):
sopa = BeautifulSoup (html)
para ligação em soup.find_all ('a'):
linkText = str (link.get ('href'))
se filetype em linkText:
image = urllib.URLopener ()
linkGet = base + linkText
FileSave = string.lstrip (linkText, "/")
image.retrieve (linkGet, FileSave)
elif "htm" em linkText: #covers tanto "html" e "htm"
linkList.append (link)
Agora que temos a nossa função downloadFiles, tudo o que temos a fazer é analisar nosso linkText para obter o nome do
diretório vamos precisar criar.
Novamente, é a manipulação de cadeia simples, juntamente com a utilização do módulo os. O módulo os nos permite manipular
diretórios e arquivos, independentemente de qual sistema operacional está sendo executado. nós Primeiro, podemos adicionar
import os
para o nosso script, e então nós podemos criar um diretório (se necessário), adicionando
os.makedirs ().
Você pode se lembrar que, a fim de simplificar a salvar, nós precisamos de ter um diretório local em nossa máquina que
corresponde ao diretório da web em que os nossos arquivos de destino são armazenados. A fim de ver se precisamos de um
diretório local, precisamos
primeiro determinar que o nome do diretório. Na maioria (se não todos) casos, esse diretório será a primeira parte de nossa
linkText; para
exemplo, o nome do diretório em /images/picture1.html é imagens. Assim, o primeiro passo é percorrer a linkText
novamente, à procura de barras da mesma forma que fizemos para chegar a base do nosso nome web-site, como este:
slashList = [i para i, ind em enumerate (linkText) se ind == '/']
directoryName linkText = [(slashList [0] + 1): slashList [1]]
O código anterior cria uma lista de índices em que barras são encontrados na cadeia de linkText. depois
directoryName fatias linkText apenas a parte entre as duas primeiras barras. (/images/picture1.html é cortada para
imagens de nosso exemplo anterior.)
A primeira linha desse trecho tem alguma explicação porque é uma importante linha de código. linkText é uma string,
e como tal é enumeráveis; isto é, os caracteres no seu interior pode ser iterada, um por um. slashList é uma lista do
posições (índices) em linkText onde uma barra está localizada. Após a primeira linha preenche slashList, directoryName
simplesmente agarra o texto contido entre a primeira e segunda barras.
As próximas duas linhas simplesmente verificar para ver se existe um diretório que corresponda directoryName; se isso não
acontecer, nós criá-lo.
se não os.path.exists (directoryName):
os.makedirs (directoryName)
Isso conclui nossa função downloadProcess, e com ele o nosso bot web simples. Experimentá-lo apontando-o para
http://www.irrelevantcheetah.com/browserimages.html e pedindo tanto ".jpg", "pdf", ou "" tipos de arquivo txt, e
vê-lo criar pastas e download de arquivos, tudo sem a sua ajuda.
Agora que você começa a idéia, você pode ficar louco com isso! Criar diretórios, ressaca três (ou mais) níveis de profundidade, e
veja
o que seus downloads bot para você, enquanto você não está procurando! Metade da diversão é por vezes vendo o que é baixado
quando você menos espera!

Capítulo 5 ■ O Web Bot


O código final
Aqui você pode ver o código final, longa que você está digitando, pouco a pouco, se você tem acompanhado ao longo como nós
progrediu através do capítulo. Novamente, se você não quiser digitar tudo, ele está disponível em Apress.com como webbot.py.
No entanto, eu recomendo que você o escreva, porque o código de aprendizagem pode ser muito mais eficaz se você digitá-lo em
vez
do que simplesmente copiando e colando-lo.
mecanizar importação
tempo de importação
BS4 de importação BeautifulSoup
re importação
urllib importação
import string
import os
def downloadProcess (html, base, filetype, LINKLIST):
"Isso faz o download do arquivo real."
sopa = BeautifulSoup (html)
para ligação em soup.find_all ('a'):
linkText = str (link.get ('href'))
se filetype em linkText:
slashList = [i para i, ind em enumerate (linkText) se ind == '/']
directoryName linkText = [(slashList [0] 1): slashList [1]]
se não os.path.exists (directoryName):
os.makedirs (directoryName)
image = urllib.URLopener ()
linkGet = base + linkText
FileSave = string.lstrip (linkText, "/")
image.retrieve (linkGet, FileSave)
elif "htm" em linkText: #covers tanto "html" e "htm"
linkList.append (link)
start = "http: //" ("Onde você gostaria de começar a procurar \ n") + raw_input
filetype = raw_input ("Que tipo de arquivo que você está procurando? \ n")
numSlash = start.count ('/') # número de barras no início necessidade de remover tudo após terceiro corte
slashList = [i para i, ind em enumerate (start) se ind == '/'] #list de índices de barras
if (len (slashList)> = 3): #if há 3 ou mais barras, cortado após 3
terceira = slashList [2]
base = start [: terceiro] #base é tudo até a terceira barra
outro:
base = início
BR = mechanize.Browser ()
r = br.open (iniciar)
html = r.read ()
LINKLIST = [] lista de links #EMPTY

Capítulo 5 ■ O Web Bot


imprimir "análise" + início
downloadProcess (html, base, filetype, LINKLIST)
por sobra em LINKLIST:
time.sleep (0,1) #WAIT 0,1 segundos para evitar a sobrecarga do servidor
linkText = str (leftover.get ('href'))
print "Analisando" + base + linkText
BR = mechanize.Browser ()
r = br.open (base + linkText)
html = r.read ()
LINKLIST = []
downloadProcess (html, base, filetype, LINKLIST)

Resumo
Neste capítulo, você tem uma boa introdução ao Python, escrevendo um bot web, ou aranha, que podem atravessar a Internet para
você e download de arquivos que você achar interessante, talvez até mesmo enquanto você dorme. Você usou uma função ou
dois, construído
e adicionado a uma lista de objeto, e até mesmo fez algumas manipulação de cadeia simples.
No próximo capítulo, vamos transição longe do mundo digital e interagir com um fenômeno muito físico, o
clima.
Capítulo 6
A Estação Meteorológica
Desde tempos imemoriais, o homem foi fascinado pelo clima, fazendo perguntas como: "Será que vai chover para as nossas
colheitas?
Será que vai neve, para que possamos ir esquiar? Será que um tornado levar a nossa casa para um país fictício povoado por
sobrenatural
mulheres e primatas aéreas com capacidade? Nós obter algum tipo de tempo a cada dia: O que é que vai ser hoje "?
Previsão do tempo nem sempre tem sido uma busca científica. Pessoas ia rezar para os deuses da chuva para a chuva e para
os deuses do sol para a luz do sol. Se a oração não funcionou, eles costumam visitar um profeta ou um vidente, que professavam a
capacidade de olhar
para o futuro e prever o caminho de um sistema de baixa pressão vindo (embora não com essas palavras em particular, é claro).
Gradualmente, a ciência por trás o tempo foi descoberto, e nós já não teve que contar com uma pedra mágica para um
previsão. (Veja a Figura 6-1). As pessoas frequentaram a escola para se tornar meteorologistas e aprender sobre frentes tempo,
tempestade
surtos e outras informações relacionadas com o clima ciência.
Figura 6-1. A pedra tempo (imagem © 2010 Tom Knapp)

Capítulo 6 ■ A Estação Meteorológica


Através de todos esses avanços, uma estação meteorológica era necessária, uma maneira pequena, localizada de manter-se na
atual
condições. Mesmo pequenas estações meteorológicas normalmente dar velocidade e direção do vento, temperatura, umidade, e
relativa
pressão barométrica. Cada uma destas leituras, quando vistos em combinação ao longo de um dia ou dois, pode ajudar
você prever o tempo para o futuro imediato.
Claro, o Raspberry Pi é perfeito para criar esta aplicação weather-estação. Um monte de poder computacional
é não necessária, mas a capacidade de interagir facilmente com uma pequena rede de sensores é. Alguns estão ligados ao Pi
através I2C
(Inter-Integrated Circuit), alguns são ligados através de modulação de largura de pulso (PWM), e alguns são simplesmente
conectado
para os pinos GPIO. Por simplesmente polling cada sensor, um a um em um estilo round-robin, podemos obter uma imagem
precisa do
que o tempo está fazendo em determinado momento.
Vamos começar por reunir as peças necessárias para construir a nossa estação meteorológica.

A Lista de Compras de Peças


A estação meteorológica não ter um monte de peças, mas o aviso justo: alguns deles são um pouco mais caro do que você pensa,
considerando o seu tamanho:
• Raspberry Pi e adaptador de energia
• bússola Digital / magnetômetro (https://www.sparkfun.com/products/10530)
• codificador de eixo óptico (http://www.vexrobotics.com/276-2156.html)
• sensor de pressão barométrica (https://www.adafruit.com/products/1603)
• Termômetro Digital (https://www.adafruit.com/products/1638)
• pequeno placa de ensaio (https://www.sparkfun.com/products/9567)
• eixo quadrado de loja de ferragens
• Pinwheel ou dispositivo semelhante a um leque semelhante
• Susan preguiçoso rolamento
• placa de madeira fina
• tubo de PVC com tampa, de cerca de 12 polegadas de comprimento, 1-2 polegadas de diâmetro
• fios de ligação Diversos, cola, parafusos

Usando o protocolo de I2C


Este projeto aproveita o protocolo I2C para se comunicar com sensores de umidade e pressão que você vai
adicionar ao Pi. Embora seja um protocolo relativamente simples, ele pode ficar um pouco confuso, por isso é melhor para
analisá-lo rapidamente antes
começamos a construção da estação.
I2C permite que um grande número de dispositivos para se comunicar em um circuito usando apenas três fios: uma linha de
dados, um relógio
linha, e um fio terra. Cada dispositivo é chamado de nó, e geralmente há um nó mestre e muitos escravos. Cada
nó escravo tem um endereço de 7 bits, como 0x77 ou 0x43. Quando o nó mestre necessita de comunicar com um determinado
escrava, começa por transmitir um pouco "start", seguido do endereço do escravo, na linha de dados. Isso escravo responde
com o reconhecimento, enquanto todos os outros escravos ignorar o resto da mensagem e voltar a espera para a próxima
pulso endereço a ser transmitida. O master e slave comunicar uns com os outros, em seguida, muitas vezes alternando entre
transmitir e receber os modos até toda a informação tenha sido transmitida.
Capítulo 6 ■ A Estação Meteorológica
I2C tem sido referido como "o protocolo de série em esteróides", e isso é mais frequentemente usado em aplicações onde
velocidade não importa e o custo das peças deve permanecer baixa. O Raspberry Pi tem dois pinos, # 3 e # 5, que são
pré-configurado para ser SCL (relógio) linhas SDA do protocolo I2C (de dados) e, respectivamente, para que ele possa se
comunicar facilmente
com dispositivos I2C. Dois dos dispositivos que nós estaremos usando (o barómetro / altímetro e o magnetômetro) são
dispositivos I2C,
por isso vamos precisar configurar o Pi para fazer funcionar o protocolo I2C. Comece editando o arquivo / etc / módulos,
digitando
sudo nano / etc / modules
e adicione as linhas
i2c-bcm2708
i2c-dev
até o fim do arquivo, salvá-lo quando você está feito. Em seguida, reiniciar o Pi com sudo shutdown -r now.
O Pi também tem um utilitário I2C que faz com que seja possível ver os dispositivos que estão conectados no momento. Para
instalá-lo, digite
sudo apt-get install python-smbus
sudo apt-get install I2C-ferramentas
Você também pode precisar de editar o seu arquivo de lista negra, se você tiver um. O arquivo blacklist.conf é usado pelo kernel
do Pi
para impedi-lo de carregar módulos desnecessários, e pode existir apenas em versões anteriores do OS Raspbian. Mais tarde
versões não tem nenhum módulos bloqueados. Veja se /etc/modprobe.d/raspi-blacklist.conf existe; se isso acontecer, comentário
as duas linhas seguintes:
#blacklist spi-bcm2708
#blacklist i2c-bcm2708
Eles estão lá para impedir que o kernel de carregar os módulos I2C, e nós precisamos de carregar esses módulos, por isso,
comentá-las.
Agora você pode executar a ferramenta de utilitário chamado I2C i2cdetect para garantir que tudo está funcionando e ver quais
dispositivos estão
conectado. Digite a seguinte linha:
sudo i2cdetect -y 1
que deve exibir a tela mostrada na Figura 6-2.
Figura 6-2. A ferramenta i2cdetect

Capítulo 6 ■ A Estação Meteorológica


Neste caso, não há dispositivos estão presentes, o que faz sentido, porque não temos conectado em qualquer ainda. Mas agora
você tem
as ferramentas necessárias instalado e funcionando corretamente.
■ Nota Se, por acaso, você não tem dispositivos conectados, mas nada está mostrando, experimente digitar sudo
i2cdetect -y 0 em vez disso.
A 1 ou 0 bandeira depende da revisão Pi acontecer de você ter. Se você tiver a revisão Pi 2, você vai usar o 1 de
pavilhão;
caso contrário, o 0 a bandeira deve funcionar.

Usando um anemômetro
Uma parte importante de qualquer estação meteorológica é o anemômetro, o dispositivo que mede a velocidade do vento, porque
o vento
velocidade é um fator importante em qualquer previsão do tempo. Se for um dia frio (abaixo de 32 ° F ou 0 ° C, por exemplo), o
vento
velocidade desempenha um fator importante para o frio que se sente (o vento frio). De acordo com o vento do Serviço Nacional
de Meteorologia
gráfico frio, um vento de 15 MPH a 15 ° F faz sentir como 0 ° F, e um vento de 20 MPH a 0 ° F faz sentir como 24 graus abaixo
zero. A velocidade do vento é importante neste caso para determinar se suas extremidades vão congelar primeiro ou cair
primeiro (ambos igualmente desagradável, se você me perguntar).
Por outro lado, se não é particularmente frio, a velocidade do vento desempenha um papel na rapidez com que o próximo tempo
fenômeno está vindo em você. Às 2 MPH, naquele dia ensolarado vai levar mais alguns dias para chegar até você; a 50 MPH,
você tem apenas alguns minutos antes de o ciclone destrói sua casa.
Um anemômetro pode ser um dispositivo relativamente complicado, com rolamentos e eixos e comutadores e assim por diante;
nosso filho
Por outro lado, é relativamente simples.
Construindo o anemômetro
Nós estaremos usando um codificador rotativo do eixo, um eixo de rotação, e algumas barbatanas para medir a velocidade do
vento.
O codificador do eixo rotativo que estamos usando de robótica Vex é composto por um disco de plástico com fendas espaçadas
uniformemente ao redor
sua circunferência. Quando a energia é aplicada, uma pequena luz brilha através das fendas no disco e em uma fotossensível
receptor no outro lado. Por contagem do número de vezes que a luz é bloqueada pelo disco (ou, alternativamente, o
número de vezes que a luz brilha através de uma fenda) em um determinado espaço de tempo, é possível determinar quão rápido o
disco é
fiação. É também possível determinar o número de vezes que o disco tenha rodado, e este é, de fato, como codificadores rotativos
são usados frequentemente; se um codificador rotativo é ligado ao eixo de um robô, é uma boa forma de medir o quão longe as
rodas
ligado ao eixo que tenham viajado, por exemplo. Se o disco tem 90 ranhuras (como o nosso faz), sabemos que uma rotação
completa
do eixo (uma rotação completa da roda) é de 90 flashes de luz sobre receptor foto do encoder. Assim, podemos dizer ao
robô, "Vá em frente 30 de fendas", e a roda vai avançar exatamente um terço da sua circunferência para a frente. Se sabemos o
circunferência do disco / roda é de 3 pés, sabemos que o robô tem apenas um avançado pé.
Isto pode parecer um monte de matemática desnecessário, mas é importante para você entender como o codificador
opera. Uma vez que anexar as barbatanas para o eixo rotativo, que poderia (teoricamente) descobrir a velocidade do vento com
base no
circunferência das aletas e a velocidade do veio. No entanto, a minha experiência é que ele é realmente muito mais fácil
simplesmente
experiência com velocidades do vento conhecidos e incorporar essas velocidades em nosso programa, de modo que é o que vamos
fazer. Façam
isso, você vai precisar de um parceiro alguém que pode levá-lo ao redor em pré-determinado, sãs velocidades, enquanto você
toma vento
medições de velocidade. Isso significa velocidades de cerca de 5-20 MPH, não 80.
Para criar o seu anemômetro, examinar sua loja de ferragem local até encontrar um pequeno eixo, 1/8-polegada quadrada que
vai caber no buraco quadrado no codificador rotativo. (Ver Figura 6-3.)

Capítulo 6 ■ A Estação Meteorológica


Figura 6-3. Eixo quadrado
■ Nota Como desta escrita, um eixo de 1/8 polegadas se encaixa perfeitamente no buraco do codificador rotativo.
Em seguida, você vai precisar de um cata-vento ou algo similar. Eu usei a parte do moinho de vento de um kit de ciência que você
pode comprar em
sua loja local do ofício (http://amzn.to/1koelSW, por exemplo). Como você pode ver, o eixo se encaixa perfeitamente nas moinho
de vento de
furo, e a barbatana direcional atribui facilmente à volta do codificador. (Ver Figura 6-4.)
Figura 6-4. Encoder com pás de vento ligado
Todo o mecanismo tem de rodar; isto é, tem de ser ligado a um dispositivo que pode girar sobre um eixo, como um
cata-vento, para que possamos determinar a direção do vento. Este é o lugar onde o conjunto de rolamento Lazy Susan entra em
jogo.
Em primeiro lugar, cortar duas fendas na extremidade do tubo de PVC em que o codificador irá caber confortavelmente (como
mostrado na Figura 6-5).

Capítulo 6 ■ A Estação Meteorológica


Figura 6-5. Encoder no slot em tubo de PVC
Coloque a tampa de PVC sobre a outra extremidade do tubo. Anexar um pedaço de luz de madeira para um lado do rolamento
Lazy Susan,
e, em seguida, tão perto do meio do eixo de rotação, como você pode, anexar o tubo de PVC e tampão com um parafuso de
por baixo. A Figura 6-6 mostra um modo para determinar o centro do eixo de rotação.
Figura 6-6. Determinar centro da plataforma
Quando estiver pronto, você deve ter uma assembléia como a mostrada na Figura 6-7.
86

Capítulo 6 ■ A Estação Meteorológica


Figura 6-7. Assembléia Anemometer
Ligar o anemômetro para o Pi
Agora precisamos ligar o anemômetro ao Pi e medir velocidades de rotação. Conecte o fio vermelho do encoder
ao pino de alimentação do Pi (# 2), o fio preto ao GND (# 6), e o fio branco a um pino GPIO de sua escolha. Vamos usar pin # 8
para fins ilustrativos.
Como mencionado anteriormente, este codificador funciona através do envio de um sinal de alta cada vez que uma fenda no disco
passa um certo
ponto. Sabemos que há 90 fendas no disco, de modo que todos os 90 sinais de alta uma rotação do eixo. Então, todos nós
precisamos
fazer é manter o controle dos altos e quanto tempo leva para obter 90 deles, e nós vamos ter velocidade de rotação ao longo do
tempo. Se nós
controlar o tempo em segundos (como veremos quando utilizando a biblioteca de tempo), nós vamos ter rotações por segundo.
Assim, o código de
leia nossa encoder deve ser algo como isto:
tempo de importação
importação RPi.GPIO como GPIO
GPIO.setmode (GPIO.BOARD)
GPIO.setup (8, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
prev_input = 0
Total = 0
atual = time.time ()
87

Capítulo 6 ■ A Estação Meteorológica


while True:
entrada = GPIO.input (8)
if ((não prev_input) e entrada):
print ("giro")
no total = Total + 1
prev_input = input
se == total de 90:
print (1 / (time.time () - atual)), "revoluções por segundo"
Total = 0
atual = time.time ()
Tudo interessante aqui acontece no loop while. Desde que começamos definindo o prev_input a 0,
a 1 (alto) como insumo significa que o disco está girando. Nesse caso, incremento total definido prev_input a entrada,
e continuar o ciclo depois de verificar para ver se chegamos a 90 ALTO ainda. Se temos, isso significa que temos ido exatamente
uma revolução, para que possamos calcular e revoluções de impressão por segundo (RPS) e redefinir total e atual. Para testar esta
código de encoder, ligue os fios ao seu Pi, executar o script, e girar manualmente a roda de codificador. Você deveria ver
90 iterações da palavra "transformar" e, em seguida, uma linha com RPS exibido.
Correlacionando rotações por segundo com velocidade do vento
Se o codificador está funcionando como deveria, o único passo à esquerda é correlacionar rotações por segundo com a velocidade
do vento, e o
maneira mais fácil de fazer isso é com um amigo e um carro. Com o anemômetro realizada fora da janela e sua Pi ligado a
seu laptop através de uma rede ad-hoc (veja o quadro), têm o seu amigo dirigir por alguns minutos a 5 MPH enquanto você
executa o
roteiro encoder; repita o processo em 10, 15 e 20 MPH até que você tenha dados suficientes para se correlacionam velocidade do
vento com RPS.
Quando eu dirigi ao redor com meu anemômetro pendurado para fora da janela, eu tenho as leituras RPS apresentados na Tabela
6-1.
Tabela 6-1. MPH correlacionada à leitura RPS utilizando um anemômetro
MPH
RPS
5
5.8
10
9.23
15
10,8
20
11,7
A correlação de MPH para RPS é, obviamente, uma relação logarítmica, o que significa que podemos usar um pouco de álgebra
(EEK!) para calcular a velocidade do vento com base em rotações por segundo.
Se você traçar esses valores em um gráfico, você começa a Figura 6-8.
Capítulo 6 ■ A Estação Meteorológica
Figura 6-8. RPS vs. MPH
Como você pode ver a partir da equação, a relação entre rotações por segundo e velocidade do vento é um
logarítmica, não linear, um. Então nós vamos ter que usar a função logarítmica inversa, ou e x, para resolver para a velocidade do vento em
termos de rotações por segundo. Eu não quero aborrecê-lo com a matemática, então basta ter a minha palavra de que
velocidade do vento = e ((y + 0,95) /4.3)
Nós vamos ser capazes de substituir esse cálculo em nosso programa final, como você verá em breve.

LIGANDO SEU PI para o seu laptop através de uma rede AD-HOC


Se você é como eu, a maior parte do trabalho que eu faço com o meu Pi é decapitado-I SSH (Secure Shell) para ele
ou executar um VNC (Virtual
Servidor Network Computing), se eu preciso ver o desktop, mas eu normalmente não têm um monitor, mouse ou
teclado
ligado a ele. Isso funciona bem se você estiver conectado à sua rede doméstica, por exemplo, mas o que se não há
nenhuma
rede em torno de? Felizmente, a criação de uma rede ad-hoc com fio entre o Pi e um laptop é bastante simples. Um
ad-hoc é simplesmente uma conexão de rede entre o Pi e outro computador, tal como o seu laptop, sem router
ou hub entre eles.
A maneira mais fácil de configurar isso é tomar nota do seu endereço IP estático do Pi e ajustar porta Ethernet do
seu laptop
para se comunicar com esse endereço. Vamos dizer que seu Pi tem o endereço 192.168.2.42. Use um cabo
Ethernet curta
para conectar o Pi directamente à porta Ethernet de seu laptop. Agora vá em configurações de rede do seu laptop.
Chances
são o seu computador está configurado para receber um endereço automaticamente a partir do roteador via DHCP
(Dynamic Host Controle
Protocolo). Mude esse método para Manual, e dar um endereço que coincide com porta de rede do seu computador
sub-rede do Pi. No nosso exemplo, um bom endereço seria 192.168.2.10. Se há pontos para isso, preencher o sub-

Capítulo 6 ■ A Estação Meteorológica


máscara (255.255.255.0 funcionará neste exemplo) e do gateway padrão (192.168.2.1 neste caso). Se necessário,
reinicie o seu computador ou reiniciar o seu gestor de rede.
Agora você deve ser capaz de fazer login em sua Pi-conectado diretamente através de uma conexão padrão de
terminal:
ssh -l 192.168.2.42 pi
e você pode trabalhar exatamente como você faria em sua rede doméstica.

Ligar o Compass Digital


A bússola digital que vamos usar neste projeto tem uma finalidade: para que possamos saber que direção o vento está soprando.
O que estamos usando, o HMC5883L, usa o protocolo I2C, para se certificar que você está familiarizado com as informações no
seção "Usando o protocolo I2C" anteriormente neste capítulo, antes de continuar.
Comece soldando os cabeçalhos do sexo masculino que veio com ele para o conselho de fuga HMC. A orientação é com você;
se você pretende torná-lo autônomo, você pode querer os cabeçalhos voltado para cima, de modo que eles são fáceis de acessar.
Se, por outro lado
mão, você está pensando em ligar o chip em uma placa de ensaio, por todos os meios solda-los para baixo, para que possa
facilmente conectar toda a unidade em sua placa.
Uma vez que os cabeçalhos são soldada à placa, conecte os pinos no seu Pi com jumpers. VCC e GND ir para o
# 2 e # 6 pinos de Pi, respectivamente, e SDA e SCL ao do Pi # 3 e # 5 pinos. Agora você está pronto para usar a biblioteca smbus
para ler a bússola, usando um pouco de matemática (eek!) para calcular o rolamento com base na x- sentiu e valores y. Agora
seria um bom momento para usar a ferramenta i2cdetect mencionado anteriormente para se certificar de que você pode ler a
bússola. Executar
a ferramenta digitando sudo i2cdetect -y 0 (ou 1) e você deve ver o chip listada com o endereço 0x1e. (Ver Figura 6-9.)
Figura 6-9. Visualizando a bússola 'endereço I2C
Se ele não aparecer, verifique novamente as conexões. (O outro endereço que você vê listados na Figura 6-9, 0x60, é
outro dispositivo I2C eu tinha ligado para o meu Pi). Quando ele aparece, iniciar um novo script Python para ler a partir do
dispositivo.
Nós vamos usar ferramentas I2C da biblioteca smbus para ler e escrever para o sensor. Em primeiro lugar, começar um diretório
em seu Pi para manter tudo
de seu código-estação meteorológica junto digitando
cd ~
tempo mkdir
cd tempo

Capítulo 6 ■ A Estação Meteorológica


Agora que você criou um diretório de tempo em sua pasta pessoal e já navegou no seu interior, digite o seguinte
código em seu novo script Python:
smbus importação
matemática importação
ônibus = smbus.SMBus (0)
address = 0x1e
read_byte def (ADR):
retorno bus.read_byte_data (endereço, adr)
read_word def (ADR):
Alto = ônibus. read_byte_data (endereço, adr)
baixo = bus.read_byte_data (endereço, adr + 1)
val = (alta << 8) + baixa
retornar val
read_word_2c def (ADR):
val = read_word (ADR)
se (Val> = 0x8000):
voltar - ((65535 - val) + 1)
outro:
retornar val
write_byte def (adr, valor):
bus.write_byte_data (endereço, adr, valor)
write_byte (0, 0b01110000)
write_byte (1, 0b00100000)
write_byte (2, 0b00000000)
escala = 0,92
x_offset = -39
y_offset = -100
x_out = (read_word_2c (3) - x_offset) * escala
y_out = (read_word_2c (7) - y_offset) * escala
rolamento = math.atan2 (y_out, x_out)
Se rolamento <0:
rolamento + = 2 * math.pi
print "Rolamento:", math.degrees (rolamento)
Depois de importar as bibliotecas corretas, este script configura funções para ler e escrever para o endereço do sensor de
usando a biblioteca smbus. O read_byte funções (), read_word (), read_word_2c (), e write_byte () são todos usados
a ler e escrever valores (tanto bytes individuais ou valores de 8 bits) para o endereço I2C do sensor. Os três write_byte (linhas)
escrever os valores de 112, 32 e 0 ao sensor para configurá-lo para a leitura. Estes valores são normalmente listada nos dados
folha que vem com um sensor de I2C.

Capítulo 6 ■ A Estação Meteorológica


■ Nota Você também pode ter notado que muitas vezes quando você compra uma placa de fuga ou de qualquer
Adafruit
Sparkfun, essas empresas têm exemplo de código disponível para esse sensor. Confira no link "Documentação" em
cada site
sempre que você compra uma parte deles. Como qualquer programador irá dizer-lhe: se o trabalho já foi feito, não há
precisa reinventar a roda. Também não há vergonha em usar código pré-existente se ele resolve o seu problema
para você.
O script, em seguida, lê os valores atuais dos xe do eixo y leituras da bússola e calcula os sensores de
rolamento com atan2 da biblioteca de matemática () (tangente inversa) função, primeiro convertendo-a em graus com a biblioteca
de
graus () função. Os valores x_offset e y_offset, no entanto, estão sujeitos a alterações, dependendo do seu atual
localização geográfica, e a melhor maneira para determinar esses valores é o de simplesmente executar o script.
Execute o script, de preferência com uma bússola de trabalho nas proximidades, e comparar as leituras que você começa a bússola
leituras. (O lado da placa com os cabeçalhos soldadas é a direção na qual a placa é "pontudo".) Você pode
ter de ajustar o bit deslocamentos por pouco para a obter o rolamento para registrar corretamente. Uma vez que é configurado,
você tem uma maneira de
medir a direção do vento; vamos montar a bússola para eixo de rotação do anemômetro para que possamos ler a
direção quando montar a estação meteorológica final.
Ligar a temperatura / umidade Sensor
O sensor de temperatura e umidade que estamos usando, o Sensirion SHT15, é uma das peças mais caras nesta compilação.
No entanto, é também muito fácil de trabalhar, porque não há nenhum protocolo I2C envolvido. Primeiro você vai precisar para
soldar o
incluídos cabeçalhos para ele. Como a bússola, a orientação dos cabeçalhos é com você. I tendem a soldar com cabeçalhos
a placa virada para cima, para que eu possa ver o que cada pino é como eu ligar os fios de ligação para ele. Claro, se eu vou ligar
o
unidade em uma placa de ensaio, isso significa que eu não posso ler os pinos, mas essa é a troca.
Uma vez que você soldadas os cabeçalhos, execute os seguintes passos:
1.
Conecte o pino VCC ao pino 5V do Pi (# 2).
2.
Conecte o pino GND para o Pi pin # 6.
3.
Conecte o pino CLK ao pino # 7.
4.
Conecte o pino de dados para o pino # 11.
■ Nota Com os pinos marcados DATA e CLK, seria um erro compreensível a pensar que este conselho é executado
no I2C
protocolo, mas isso não acontece. Os pinos são apenas rotulado dessa forma.
Para trabalhar com este sensor, você terá que instalar a biblioteca rpiSht1x python por Luca Nobili. Dentro de sua
diretório do tempo (ou onde quer que você está trabalhando em seu código de estação meteorológica), baixar a biblioteca rpiSht1x
digitando
wget http://bit.ly/1i4z4Lh --no-check-certificado
■ Nota Você precisará usar o "--no-check-certificado bandeira" porque eu tenho o link encurtado usando o
link-encurtamento serviço bitly.com para tornar mais fácil para você digitar. Normalmente, quando você baixar um
arquivo usando wget,
ele só salva para o diretório atual, mas mudar o nome do link usando bitly.com pode levar a um comportamento
estranho quando
descarga. Esta bandeira corrige esse problema.

Capítulo 6 ■ A Estação Meteorológica


Quando é feito o download (que não deve demorar muito, considerando que é apenas um download 8 KB), você vai precisar
renomeá-lo para que você pode expandi-lo. Renomeie- o arquivo baixado, digitando
mv 1i4z4Lh rpiSht1x-1.2.tar.gz
e em seguida, expanda o resultado digitando
tar -xvzf rpiSht1x-1.2.tar.gz
Em seguida, cd para o diretório resultante (cd rpiSht1x-1.2) e prazo
sudo python setup.py install
Você tem agora a biblioteca disponível para você, então vamos experimentá-lo. Com seu SHT15 ainda ligado, como definido
anteriormente,
escreva o seguinte código:
de importação sht1x.Sht1x Sht1x como SHT1x
dataPin = 11
clkPin = 7
sht1x = SHT1x (dataPin, clkPin, SHT1x.GPIO_BOARD)
temperatura = sht1x.read_temperature_C ()
Umidade = sht1x.read_humidity ()
ponto de orvalho = sht1x.calculate_dew_point (temperatura, umidade)
temperatura = temperatura * 9/5 + 32
#use isso se você gostaria de sua temperatura em graus F
print ("Temperatura: {} Umidade: {} Ponto de Orvalho: {}". format (temperatura, umidade, ponto de orvalho))
Salve esse código como sht.py e executá-lo com sudo python sht.py. O script usa as funções definidas no
Adafruit script do read_temperature_C (), read_humidity (), e calculate_dew_point () - para obter os valores atuais
a partir do sensor, o que temos conectado aos pinos 7 e 11. Em seguida, ele executa uma conversão rápida para aqueles de nós que
não utilizam
o sistema métrico e exibe os resultados.
Você deve obter uma linha com as suas condições atuais:
Temperatura: 72,824 Umidade: 24,282517922 Ponto de Orvalho: 1,22106391724
Como você pode ver, é uma biblioteca bastante auto-explicativo. Muitas dessas bibliotecas começaram suas vidas como escrito
para o
Arduino se comunicar com eles, e felizmente eles desde que foi portado para rodar no Pi. (Veja a nota lateral
com relação ao uso do código existente anteriormente.)

Ligar o Barômetro
Talvez uma das partes mais interessantes da estação meteorológica é o chip barómetro BMP180, mesmo por que
mudando a pressão do ar é um dos melhores indicadores, como o que o tempo vai fazer a seguir. Em geral, caindo
pressão de ar indica uma tempestade no caminho e crescente pressão de ar indica bom tempo pela frente. Isso é um
simplificação, é claro, mas que parece ser o caso.
O chip BMP180 é executado no protocolo I2C, então você vai ter que conectá-lo até seus SDA e SCL pinos (pinos de Pi # 3 e
# 5) como você fez com a bússola. Depois de soldar os cabeçalhos para o conselho, se conectar VCC e GND para os pinos # 1 e #
6,
e, em seguida, SDA e SCL para os pinos # 3 e # 5, respectivamente.

Capítulo 6 ■ A Estação Meteorológica


■ Nota Você está se conectando de energia do chip para 3.3V do Pi, não a 5V. Você quer que o chip para ser
executado em 3.3V lógica para que ele
não tem a chance de danificar entradas 3.3V delicadas do Pi.
Para se certificar que tudo está conectado corretamente, executar sudo i2cdetect -y 0 e verifique se o dispositivo aparece.
Ele deve aparecer como endereço 0x77, como na Figura 6-10.
Figura 6-10. I2cdetect que mostra os endereços e 0x77 0x1E em uso
■ Observação O 0x1e dispositivo na captura de tela na Figura 6-10 é a bússola conectado estamos usando.
Mais uma vez, este dispositivo necessita de algumas bibliotecas externas para trabalhar. Neste caso, vamos usar excelente
BMP085 da Adafruit
bibliotecas.
■ Observação versão original do chip BMP180 foi o BMP085. Embora desde então tem sido substituído, o esquema
e
pinagem dos chips é o mesmo, então todas as bibliotecas escritos para o BMP085 também trabalhar para o
BMP180.
Para agarrar a biblioteca necessária, no seu tipo de terminal
wget http://bit.ly/NJZOTr --no-check-certificado
Como fizemos antes, nós vamos precisar mudar o nome do arquivo baixado para que possamos usá-lo. Neste caso, o que nós
arquivo
baixado é nomeado NJZOTr. Renomeá-lo digitando
mv NJZOTr Adafruit_BMP085.py

Capítulo 6 ■ A Estação Meteorológica


Não há nada para instalar aqui, para que possamos ir direto para usar a biblioteca para se comunicar com o chip. Em uma nova
Script Python no mesmo diretório, digite o seguinte:
Adafruit_BMP085 BMP085 de importação
bmp = BMP085 (0x77)
# Você pode reconhecer o endereço I2C aqui!
temp = bmp.readTemperature ()
temp = temperatura * 05/09 + 32
#if você não está em um dos 99% dos países que utilizam Celsius
pressão = bmp.readPressure ()
altitude = bmp.readAltitude ()
print "Temperatura:
% .2f F "% temp
print "Pressão:
% HPa .2f "% (pressão / 100,0)
print "Altitude:
% .2f "Altitude%
Como o roteiro para o sensor de temperatura fez, este pouco de código usa a biblioteca de pré-escrita e suas funções para
ler os valores necessários a partir do chip de barômetro. Ao executá-lo, você deve obter algo como a Figura 6-11.
Figura 6-11. Saída de sensor de pressão BMP180
Agora você pode ler a partir de todos os seus sensores, por isso é hora de colocar tudo junto!

Ligação dos Bits


Uma parte importante da construção de esta estação do tempo está colocando tudo (ou pelo menos a bússola) em uma rotação
plataforma para que você possa determinar a direção do vento. Como você pode ver na Figura 6-12, eu coloquei todas as minhas
fichas em um único
placa de ensaio e conectá-lo ao Pi de modo que era mais fácil para mim para montar tudo (Pi e placa de ensaio) em um
plataforma rotativa. Com uma plataforma de tamanho decente em seu preguiçoso Suzan rolamento, isso não deve ser um
problema.

Capítulo 6 ■ A Estação Meteorológica


Figura 6-12. Breadboarded fichas
Observe a figura 6-12, você pode ter notado como eu o fiz,: eu usei os trilhos de alimentação que funcionam abaixo de um lado da
placa para o lado positivo (+) e negativo (-) conexões, enquanto, por outro lado eu usei os trilhos para os dados (SDA) e
relógio (SCL) linhas para as conexões I2C. É a maneira mais fácil que eu encontrei para anexar vários dispositivos I2C diferente
do Pi,
uma vez que partilham as linhas de relógio e de dados.
Com o anemômetro montado no seu tempo de estação base, agora você pode anexar o Pi e o breadboarded
bússola, sensor de temperatura, barómetro e batatas fritas. Por causa das curtas ligações do codificador rotativo, pode ser
necessário
para montar uma placa de ensaio adicional para o seu mastro anemômetro, como você pode ver na figura. Seu conjunto final
pode parecer algo como a Figura 6-13. Fortaleça sua Pi, e você está pronto para receber atualizações meteorológicas.
Capítulo 6 ■ A Estação Meteorológica
Figura 6-13. Concluída estação meteorológica
Vamos escrever o código para que o Pi consulta cada sensor a cada 30 segundos e exibe os resultados na tela.
Veja o código final.

O código final
O código final está disponível como weather.py de Apress.com.
import os
tempo de importação
de importação sht1x.Sht1x Sht1x como SHT1x
importação Rpi.GPIO como GPIO
Adafruit_BMP085 BMP085 de importação
smbus importação
matemática importação

Capítulo 6 ■ A Estação Meteorológica


GPIO.setmode (GPIO.BOARD)
GPIO.setup (8, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
ônibus = smbus.SMBus (0)
address = 0x1e
def
read_byte (ADR):
retorno bus.read_byte_data (endereço, adr)
def
read_word (ADR):
Alto = bus.read_byte_data (endereço, adr)
baixo = bus.read_byte_data (endereço, adr)
val = (alta << 8) + baixa
retornar val
def
read_word_2c (ADR):
val = read_word (ADR)
se (Val> = 0x8000):
voltar - ((65535 - val) + 1)
outro:
retornar val
def
write_byte (adr, valor):
bus.write_byte_data (endereço, adr, valor)
def
Checktemp ():
dataPin = 11
clkPin = 7
sht1x = SHT1x (dataPin, clkPin, SHT1x.GPIO_BOARD)
temp = sht1x.read_temperature_C ()
temp = temperatura * 05/09 + 32
#if você quer graus F
retorno temporário
def
checkHumidity ():
dataPin = 11
clkPin = 7
sht1x = SHT1x (dataPin, clkPin, SHT1x.GPIO_BOARD)
Umidade = sht1x.read_humidity ()
retorno umidade
def
checkBarometer ():
bmp = BMP085 (0x77)
pressão = bmp.readPressure ()
pressão = pressão / 100,0
pressão de retorno
def
checkWindSpeed ()
prev_input = 0
Total = 0
totalSpeed = 0
atual = time.time ()

Capítulo 6 ■ A Estação Meteorológica


para i no intervalo (0, 900):
entrada = GPIO.input (8)
if ((não prev_input) e entrada):
no total = Total + 1
prev_input = input
se == total de 90:
RPS = (1 / (time.time () - atual))
velocidade = math.exp (RPS (+ 0,95) /4.3)
totalSpeed = totalSpeed + velocidade
Total = 0
atual = time.time ()
velocidade = totalSpeed / 10
#AVERAGE velocidade em cada dez voltas
velocidade de retorno
def checkWindDirection ()
write_byte (0, 0b01110000)
write_byte (0, 0b00100000)
write_byte (0, 0b00000000)
escala = 0,92
x_offset = 106
#use os deslocamentos você computadorizada
yoffset = -175
#use os deslocamentos você computadorizada
x_out = (read_word_2c (3) - x_offset) * escala
y_out = (read_word_2c (7) - y_offset) * escala
direction = math.atan2 (y_out, x_out)
if (direção <0):
+ direção = 2 * math.pi
Direcção = math.degrees (direção)
direção de retorno
loop de programa #main
while True:
temp = Checktemp ()
Umidade = checkHumidity ()
pressão = checkBarometer ()
velocidade = checkWindSpeed ()
direction = checkWindDirection ()
os.system ("clear")
impressão "Condições Actuais"
imprimir "----------------------------------------"
print "Temperatura:
", Str (temp)
print "Umidade:
", Str (umidade)
print "Pressão:
", Str (pressão)
imprimir "de velocidade do vento:
", Str (velocidade)
print "Direção do Vento:", str (direção)
time.sleep (30)

Capítulo 6 ■ A Estação Meteorológica


Resumo
Neste capítulo, você construiu uma estação meteorológica a partir do zero e instalados os sensores necessários para manter o
controle sobre a
vir-nos tempo, incluindo a pressão barométrica, temperatura, umidade, velocidade do vento, e até mesmo a direção do vento.
Você aprendeu mais sobre a interface I2C e agora deve ter uma boa noção de como usar as funções do Python para
repetir tarefas em um determinado intervalo. Você também já fez mais de fabricação aqui do que qualquer outro projeto até agora;
agora você pode tirar
uma pausa porque o próximo projeto, o servidor de mídia, não requer qualquer construção!

Capítulo 7
O Media Server
O conceito por trás de um servidor de mídia é a capacidade de armazenar todos os seus arquivos de mídia de música e filmes em
um centro-
localização, e depois transmiti-los a partir desse local para qualquer dispositivo em sua casa que você escolher. Estes dias, quase
cada dispositivo de mídia (e alguns dispositivos não-mídia) pode ligar a uma rede senão a Internet, então, pelo menos,
sua rede doméstica. Isto significa que todas essas máquinas, exceto, talvez, para o refrigerador, pode tornar-se clientes,
streaming de arquivos de mídia a partir de um centro servidor. Esta é a linguagem padrão de rede; o computador que armazena
Arquivos-
sejam eles arquivos de mídia, planilhas ou páginas de web é chamado de servidor e os computadores que solicitam esses arquivos
são
chamados clientes.
Quando isso acontece, o Pi é perfeito para agir como um servidor. Isso porque há muito pouco poder de computação necessário
(um Arduino pode realmente ser um servidor de mídia, e é cerca de 100 vezes menos potente do que o Pi), e espaço de
armazenamento é
não é um problema, porque você pode transmitir arquivos de mídia a partir de qualquer dispositivo de armazenamento conectado,
como um disco rígido externo.
O Pi pode transmitir arquivos para qualquer dispositivo compatível. "Mas é uma caixa de Linux!" Eu ouço alguns de vocês
gritando na parte de trás
fila. "Eu preciso transmitir ao meu laptop Windows!" Não é um problema, o software usaremos para atuar como o servidor
permite Linux
servidores e clientes do Windows para jogar bem juntos.
Em relação a seus arquivos de mídia, eu estou indo supor que você é, um cidadão cumpridor da lei íntegro que tenha pagado para
todos
dos seus filmes e música e acumularam uma coleção bastante o correto, legal caminho. Certo? Certo. Vamos começar com o
peças que você vai precisar.

A Lista de Compras de Peças


Este projeto requer quase nenhuma peças. Tudo que você precisa é a sua Pi e um disco rígido USB externo grande o suficiente
para armazenar
todos os seus arquivos. O Pi deve reconhecer a maioria das unidades externas modernos, mas eu recomendo que se você comprar
um carro
para este efeito, você conecte-o ao Pi e se certificar que tudo funciona antes de iniciar a transferência de arquivos gigabytes
para que ele seja transmitido.

Usando uma unidade NTFS


O disco rígido USB que você usa precisa ser formatado como uma unidade NTFS (New Technology File System). NTFS é um
Formato Windows que muitas vezes requer algum tratamento especial, a fim de ser compatível com Linux. Foi o FAT32
formato mais usado frequentemente antes de NTFS e Linux e Unix não tinha problemas de leitura ou gravando a ele, mas FAT32
não consegue lidar com tamanhos de arquivo mais de 4 GB-limite facilmente ultrapassado por um arquivo de filme de alta
definição. Assim, nós movemo-nos para
o formato NTFS, que pode lidar com tamanhos de arquivo até 16 TB sem suar a camisa. FAT32 também teve problemas com um
total
conduzir tamanhos; dependendo do tamanho dos clusters de arquivo, ele só poderia formatar uma unidade até cerca de 127 GB.
Formatos NTFS, sobre
por outro lado, têm um teórico limite de tamanho superior de 256 TB com um cluster de 64 KB, obviamente, muito maior e mais
aplicável aos tamanhos de arquivo e de unidade maiores de hoje.
Os tamanhos dos arquivos são uma fonte comum de confusão com muitos utilizadores a criação de um servidor de arquivos /
media pela primeira vez.
Tabela 7-1 irá ajudá-lo a fazer algum sentido deles.

Capítulo 7 ■ O Media Server


Tabela 7-1. Tamanhos de arquivos comuns
Tipo de arquivo
Tipo de arquivo
Tamanho médio
Canção
mp3
5 MB
Vídeo de música
mp4, avi, mpg
150 MB
Filme def padrão
mp4, avi, mpg
750 MB
Filme def alta (~ 1080p) MP4, AVI, MKV, mpg
> 1.5 GB
Mantenha os tamanhos em mente como você olha para sua coleção de música e de vídeo atual e compras em torno de uma
unidade em
para armazená-los. Lembre-se também: 1024 KB é igual a 1 MB, 1024 MB equivale a 1 GB, 1.024 GB equivale a 1 TB. (Sim
você pode
rodada a 1000 na maioria dos casos; é uma coisa-2 binário 10 = 1024.) Por sorte, os preços estão caindo de forma constante de
armazenamento, e você pode
mais provável pegar uma unidade de 2 TB por menos de US $ 150 US.
Porque a maioria dos discos comprados são pré-formatados com o formato NTFS, vamos ter certeza de sua Pi pode ler e
escrever para ele, através da instalação de um programa chamado NTFS-3G. Abra um terminal, e instalá-lo digitando
sudo apt-get install ntfs-3g
NTFS-3G é uma fonte aberta, ler-escrever programa driver NTFS para Linux, Android, Mac OSX, e vários outros sistemas.
Ele vem pré-instalado na maioria dos sistemas Linux, mas não o Pi (como esta escrito), que é por isso que você vai precisar para
adicioná-lo.
Uma vez que o NTFS-3G estiver instalado, conecte sua unidade em sua Pi. Você provavelmente vai ser saudado com uma janela
pop-up pedindo
o que fazer; basta selecionar "Abrir no Gerenciador de Arquivos" e continuar. Uma vez que você sabe que você pode lê-lo
(exibindo seus arquivos),
certifique-se de que você pode escrever para ele abrindo um terminal e criar um diretório (que é apenas para testes), como este:
CD ../../
mídia de CD
ls
cd "My Book" (ou qualquer que seja a sua unidade é de uso nomeado ls para encontrar o nome)
teste mkdir
Se a pasta de teste aparece, você pode seguir em frente. Se não, certifique-se de que você instalou o NTFS-3G, e reinicie o Pi se
necessário.
Você pode ter notado o fato de que "My Book" está entre aspas no comando anterior. Isso porque arquivo enquanto
nomes podem conter espaços, você precisa contabilizar os espaços quando você está usando a linha de comando. Se você precisar
diretórios de mudança (CD) para uma pasta chamada My Book, apenas digitando a seguinte linha lhe dará um erro de arquivo não
encontrado,
porque o sistema operacional procura por uma pasta chamada My e depois pára procurando:
cd My Book
A forma de contabilizar espaços em nomes de arquivos é que usar aspas o nome ou escapar do espaço
com uma barra invertida, assim:
Meu cd \ Livro
Precisamos criar uma pasta de mídia no diretório / media do Pi, onde estaremos armazenando todas as nossas músicas e
arquivos de filme. Nós podemos criar subdiretórios lá mais tarde, mas por agora nós só queremos ter certeza de que cada vez que
inicializar
o nosso Pi, o disco rígido externo vai se montado para a mesma pasta. Isso ocorre porque todos os nossos outros dispositivos
(clientes) vai
estar olhando para essa pasta quando configurá-los, e nós não queremos ter de reconfigurá-los para pedir um diferente
pasta cada vez que inicializar o nosso Pi. Para criar essa pasta, faça-o como usuário root:
sudo mkdir / media / Mídia

Capítulo 7 ■ O Media Server


Para definir a pasta de mídia como um ponto de montagem, precisamos editar um arquivo chamado fstab e inserir informações da
nossa unidade.
Em primeiro lugar, precisamos de informações da nossa unidade. Em seu terminal, digite o seguinte comando:
sudo blkid
Isto irá listar todas as unidades, tanto virtuais e físicos, atualmente conectados ao seu Pi. Os resultados da minha blkid,
por exemplo, se parecer com a tela mostrada na Figura 7-1.
Figura 7-1. Resultados blkid
Como você pode ver, o disco montado como / dev / sda1; "My Book", é o que nos interessa, e o que nós precisamos é de
UUID que do disco (Universally Unique Identifier).
Agora precisamos abrir o arquivo fstab, digitando
sudo nano / etc / fstab
Provavelmente haverá algumas linhas já no arquivo. Eles seguem este formato:
Nome do dispositivo | Ponto de montagem | Sistema de arquivos | Opções | Opções de despejo | Opções de verificação do sistema
de arquivos
Nós precisamos adicionar a nossa unidade externa e ponto de montagem para o arquivo, com o sistema de arquivo correto e
opções. Assim, como um
exemplo, para uma unidade formatada em NTFS fictício, gostaria de acrescentar o seguinte (cada um separado por um tab):
UUID = 39E4-56YT
/ media / Mídia
ntfs-3g
auto, user, rw, exec
0
0
A primeira entrada é UUID do seu carro, o segundo é a pasta que criamos anteriormente (que se tornará o monte
ponto), o terceiro é o tipo de volume, e os três últimos são as permissões necessárias e opções padrão.
Uma vez que você adicionou ao e salvou o arquivo fstab, montar todas as unidades em-lo digitando
sudo mount -a
(que deve forçar montar todas as unidades listadas na fstab se não está já montado), e você deve ouvir o seu
spin para cima rígido externo. Em seguida, ver se ele montado corretamente para a pasta correta ao escrever o seguinte, que lista
todos
Atualmente unidades montadas:
df -h
Se tudo aparece corretamente, você pode passar para a próxima etapa do processo, a instalação de Samba.

Capítulo 7 ■ O Media Server


Instalando o Samba
Como o site da Samba explica, "Samba é executado em plataformas Unix, mas fala para clientes Windows como um nativo.
Permite
um sistema Unix para mover-se em um Windows 'Vizinhança na rede' sem causar um rebuliço. Os usuários do Windows lata feliz
arquivo de acesso e serviços de impressão sem saber ou se importar que esses serviços estão sendo oferecidos por um host Unix
"O.
nomear Samba vem do SMB (Server Message Block) protocolo, que é uma parte do CIFS (Common Internet
File System) posto para fora por Microsoft em sua tentativa de obter junto com outros sistemas operacionais sem causar um
outright
motim.
Este programa, então, é o que temos de instalar no Pi para que a sua coleção de caixas de Windows podem receber
arquivos de mídia, bem como sua coleção de Macs e Linux caixas. Ele é pré-instalado em muitas distribuições Linux; o Pi,
No entanto, não é um deles. A instalação é tão simples como escrever
sudo apt-get install samba

SAMBA como uma ligação


Era uma vez, todos os computadores jogou muito bem juntos. Networking foi simples, e os computadores
comunicada facilmente através de linhas telefônicas, com baixas taxas de transmissão e pequenas mensagens. Se
você precisava falar com outra
computador, as chances são de que era mais de um BBS (Bulletin Board System) e não importa que sistema
operacional você
estavam usando. Se você não estava usando um BBS, as chances eram de que você estava executando o DOS
como um sistema operacional, como foi
o computador ao qual você estava falando. Foi um tempo mais simples. Em seguida, como computadores tem mais
complexa, diferente
sistemas operacionais surgiu. De um lado da parede divisória foi o império Unix, com seus reinos menores de
Linux, Mac e BSD. Do outro lado do muro foi o grande império Microsoft, começando com o grande Rei
DOS e seguida por seus herdeiros, os modelos do Windows a partir do Windows 1.01 para o Windows de hoje 8.1.
Existia uma relativa paz entre os reinos; na verdade, os dois lados raramente falava, por isso não havia hostilidades.
À medida que a Internet e outras redes interligadas cresceu, no entanto, tornou-se necessário para os dois lados
trocar arquivos sem problemas e sem erros. O império Unix, sendo o menor dos dois, ajustado toda a sua
sistemas operacionais para se tornar facilmente os clientes para um servidor Windows, como esta foi uma
configuração comum em um
configuração de rede. O lado do Windows, no entanto, se recusou a acreditar que ele nunca iria se inclinar para
recebimento de arquivos a partir de um
Servidor Unix e não fez nada para fazer este fácil ou mesmo possível.
No entanto, servidores Unix e Linux têm proliferado, mesmo quando o número de clientes de desktop do Windows
tem
aumentou, e, portanto, eventualmente, tornou-se necessário para um cliente Windows para se comunicar e trocar
arquivos com
um servidor Unix com sabor. Enquanto isso poderia ser feito, não foi fácil, e normalmente exigido um super usuário
com íntima
conhecimento de protocolos e linguagens de redes. Digite Samba, um programa projetado para permitir que estes
diferentes
computadores para se comunicar facilmente com menos dores de cabeça por parte do usuário.

Configurando Samba
Uma vez Samba é instalado, é preciso configurá-lo. É uma boa idéia fazer um backup do arquivo de configuração atual
antes de editá-lo para que você pode simplesmente restaurar deveria você regiamente estragar tudo.
Para fazer isso, use o comando do Linux cp:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig

Capítulo 7 ■ O Media Server


Este comando copia o arquivo smb.conf para o arquivo smb.conf.orig no mesmo diretório. Ele precisa ser executado como sudo,
porque a pasta / etc pode ser editado somente pelo usuário root. Quando isso é feito, você pode abrir o arquivo para edição,
digitando
sudo nano /etc/samba/smb.conf
Você será saudado por uma configuração bastante grande arquivo-não deixe assustar. Nós só precisamos de alterar algumas
configurações.
O tamanho do ficheiro de configuração é um indicativo de como é adaptável Samba realmente; porque ele é usado em toda a
Internet,
como um servidor web e um servidor de arquivos, é importante que os usuários podem alterá-lo para atender às suas necessidades
exclusivas. Nossas necessidades são
na verdade, bastante simples, e, portanto, não nos obrigam a mudar muitas coisas em configurações padrão do programa.
A primeira definição que pode precisar de editar é o grupo de trabalho. O grupo de trabalho é simplesmente o domínio que o
Samba
servidor (o Pi) será uma parte. Como um servidor de home media, o domínio é o que o Windows chama um -sua "grupo de
trabalho"
rede doméstica. De acordo com as configurações globais, a mudança
workgroup = WORKGROUP
para o nome de seu grupo de trabalho local, se você tiver um. Se você não tem um set-up, deixe a configuração de grupo de
trabalho como ele é.
Em seguida, altere a string de servidor% h, remova o comentário da seguinte linha (através da remoção do hash tag):
#wins apoio = no
e alterá-lo para ler
ganha apoio = yes
De acordo com as configurações de rede, altere a linha de interfaces para ler
;
as interfaces eth0 = wlan0 lo
Deixar a seguinte linha como ela é:
interfaces de ligar apenas = yes
Um pouco mais abaixo, se for comentada, descomente
security = user
A última parte para a mudança é a seção Compartilhar Definições. Esta seção é onde você lista e configurar os campos
e pastas que você deseja Samba para compartilhar com os outros. Desça até a parte inferior dessa seção, e adicione as seguintes
linhas:
[Mídia]
= comentar Media Drive
path = / media / Mídia
browseable = yes
guest ok = yes
gravável = yes
pública = yes
disponível = yes
criar mask = 0666
máscara diretório = 0777
Isso cria a parte de partilha de sua instalação Samba para coincidir com a unidade e pasta que criamos anteriormente. Isso também
torna a pasta ver-capazes e cria a permissão correta compartilhamento para essa pasta.

Capítulo 7 ■ O Media Server


Definindo permissões do Linux
Permissões de arquivos Linux são uma besta interessante, e eles poderiam usar alguma iluminação, porque você é obrigado a vir
entre eles, de alguma forma em suas viagens através do país Raspberry Pi na terra do Linux. Cada arquivo ou pasta tem
três grupos de permissões associadas a ele: o proprietário, o grupo, e a todos os usuários do grupo. Essas permissões são ou
r, w ou x, para leitura, escrever e executar.
Quando você listar os arquivos em um diretório com
ls -l
você pode ver que cada item no diretório é precedida por uma linha como esta
-rwxrwxrwx
ou
drwsr-xr-x
O primeiro caractere é ou um - (hífen) ou ad, que lhe diz que é um arquivo ou um diretório. Em seguida, o
permissões são listados em grupos de três, na ordem de proprietário, grupo e todos os usuários. Um arquivo listado como meio -
rwxrwxrwx
que o proprietário do arquivo, os usuários pertencentes ao grupo que foi atribuída a esse diretório, e todos os usuários têm todos
ler, escrever e executar permissões para esse arquivo. Se o ficheiro está listada como -rwxr-xr-x, por outro lado, isso significa que
somente o proprietário tem permissões de gravação (pode escrever e salvar a ela.) Os outros dois grupos só podem ler o arquivo e
executá-lo.
Se você precisar alterar as permissões de um arquivo, você usar o comando chmod, o que pode ser feito de forma explícita ou
com uma representação binária dessas permissões. Se você quiser fazê-lo explicitamente, as bandeiras utilizadas para cada grupo
são u
(proprietário), g (grupo), e o (todos os usuários). Por exemplo, se você quisesse alterar o arquivo -rwxrwxrwx a ser somente
leitura para todos
os usuários, você deve digitar
chmod o-wx filename
que mudaria sua listagem de diretório para -rwxrwxr--. Para fazer o inverso, você deve digitar
chmod o + wx filename
para restaurar a gravação e executar permissões para todos os usuários.
Se você preferir usar as permissões de binários, você pode fazer isso também. Basicamente, cada permissão tem um valor;
r = 4, w = 2 e x = 1. Você adiciona os números inteiros para as permissões de cada grupo, e configurá-los dessa forma. Assim, um
grupo
permissões rwx seria um 7, e uma permissão rx seria um 5. Você precisa definir as permissões de cada grupo se você fizer
dessa maneira; se um arquivo tem atualmente permissões -rwxrwxrwx, e você quer tirar permissões de gravação para o grupo
e todos os usuários, você deve digitar
chmod 755 filename
Ele pode ficar um pouco confuso, mas uma vez que você trabalhou um pouco com permissões, tudo vai fazer sentido. Na nossa
Arquivo de configuração do Samba, você definir as permissões de máscara e de diretório a -r-xr-xr-x e -rwxrwxrwx,
respectivamente,
que é o que precisamos a fim de transmitir todos os arquivos no diretório para os clientes.

Capítulo 7 ■ O Media Server


Fixação do Bug Apostrophe
Há uma outra coisa que você pode precisar editar na configuração do Samba padrão, e é algo que em meu-
parecer de você não deveria ter que fazer, mas é um erro e pode estragar tudo, se você perdê-lo. Olhe através de toda a
descomentei linhas no arquivo e certifique-se de que não há apóstrofos solitários (') utilizadas como possessives no meio
de uma linha. Se houver, exclua-os. Por exemplo, na parte inferior do arquivo, pode haver um apóstrofo no [CDROM]
seção:
;[CD ROM]
; comment = CD-ROM do servidor Samba
; read only = yes
; = sem bloqueio
; path = / cdrom
; guest ok = yes
Vê-lo lá na segunda linha? O problema é que o arquivo de configuração trata tudo após o apóstrofo
como uma string literal, e não prestar atenção a qualquer coisa contida nele até que ele se depara com um outro único
apóstrofo (mais uma vez, em uma linha uncommented) para fechar a string. Assim, mesmo se ele não estiver em uma seção da
configuração do arquivo que você
acho que você vai usar, ele ainda estraga o processo de configuração. Basta fazer a segunda linha neste exemplo parecido com
este:
; comment = servidores Samba CD-ROM
e ele deve funcionar bem depois disso. No meu arquivo smb.conf, havia três apóstrofos que tiveram de ser excluído antes
a configuração funcionou correctamente. Se eles estão em uma linha comentada (precedido por um "#") estão totalmente
ignoradas pela
computador, para aqueles que você pode deixar em paz.
Reiniciar o Serviço de Samba
Quando você terminar de editar o arquivo de configuração, reinicie o serviço Samba, digitando
sudo samba serviço restart
Quando é instalado e funcionando novamente, ir para uma máquina Windows em sua rede doméstica e abrir um prompt de
comando.
No prompt, tipo
net view \\ 192.168.xx.xxx
(substituindo o endereço IP do seu Pi, obviamente). Você deve receber algo de volta como você vê na figura 7-2.
Capítulo 7 ■ O Media Server
Figura 7-2. Vista Líquido de um compartilhamento de Samba de trabalho
Conectando-se ao compartilhamento do Samba como um (rede) unidade compartilhada é, infelizmente, um pouco diferente em
cada versão
do Windows. Porque este livro é sobre o Pi, não o Windows, eu não posso entrar em todos os detalhes para cada versão usando
uma interface gráfica. No entanto, se você não se importa usando uma interface de linha de comando, o comando para montar a
mídia
pasta em um compartilhamento Samba localizado na 192.168.2.42 no mesmo domínio é realmente muito simples. Parece que este
net use z: \\ 192.168.2.42 \ Media * / USUÁRIO: pi / P: Sim
Se tudo sobre o Pi está definido corretamente, você deve ver sua pasta de mídia montado como um Z: unidade. No entanto, o
Windows 7
é notório por não querer jogar bem com Samba pastas compartilhadas. Se você está confiante de que você tem tudo
configurado corretamente, mas ainda não pode ver o conteúdo da pasta (que você está recebendo um "acesso negado" erro, por
exemplo),
experimentá-lo com um sistema operacional diferente. Seu sistema operacional Windows pode ser o problema.

Conectando com Linux / OS X


"Mas espere!" Eu posso ouvir alguns de vocês gritando fracamente na parte de trás da sala. "E se a gente quiser se conectar a
nossa
servidor com uma caixa de Linux ou Mac? "
Bem, em primeiro lugar, se você estiver executando uma caixa de Linux em outro lugar em sua casa, você provavelmente não
precisa de qualquer ajuda
conectar a um compartilhamento do Samba. Se, entretanto, você estiver usando um Mac, é novamente muito fácil se conectar. A
partir do seu Finder, clique em
"Vá" e "Conectar ao Servidor". (Ver Figura 7-3.)
Capítulo 7 ■ O Media Server
Figura 7-3. Menu de ligação
Na janela que aparece, digite o endereço de e pasta compartilhada e clique em Conectar. (Ver Figura 7-4.) Entre no
nome e senha que você usa para fazer login no Pi na próxima janela, e a pasta deve montar como uma unidade compartilhada,
acessíveis a partir de qualquer janela do Finder. Se acontecer de você estar usando Mavericks de Mac (OS 10.9), você também
pode ter problemas
conectando como "pi," mas você pode ser capaz de se conectar como "Convidado". Este é um problema com o Mavericks e,
infelizmente, é
não algo que eu possa facilmente resolver aqui.
Figura 7-4. "Conectar ao Servidor" janela de diálogo em um Mac
Agora você tem uma instalação funcional Samba você pode usar para compartilhar qualquer coisa que você colocar na pasta, e
por que
das permissões que você deu a ele, você não precisa se preocupar com acidentalmente excluir um arquivo na sua pasta de mídia a
partir de
outro dispositivo na rede. A única maneira de adicionar ou subtrair a partir da pasta compartilhada é do próprio Pi a pouco
segurança para a sua música e filmes.

Capítulo 7 ■ O Media Server


Onde está Python?
Mas espera! Onde está o Python neste capítulo? Bem, não há Python neste capítulo. Este é um bom exemplo de um
situação em que a programação não é necessário; as ferramentas que estão disponíveis são bons o suficiente apenas como elas
são, e
às vezes é tão valioso para saber quando não programar, pois é para saber quando a programar.

Resumo
Neste capítulo, você aprendeu um pouco sobre como os servidores e clientes operam, tanto na Internet e sobre a sua casa
rede. Você aprendeu sobre como obter o Pi e outros computadores (nomeadamente Windows) para jogar bem juntos, e como
compartilhar todos os seus arquivos de mídia em sua rede doméstica, acessível por qualquer dispositivo conectado, usando um
compartilhamento de arquivos livre
programa.
No próximo capítulo, você aprenderá como usar o Pi para proteger sua casa rede não de hackers, mas a partir de
intrusos físicas.

Capítulo 8
O sistema de segurança Home
Vivendo em tempos modernos pode ser. . . bem, vamos enfrentá-lo. Pode ser, uma coisa estressante assustador. Os vilões, e os
crimes que
cometer, estão por toda parte. De acordo com o site do FBI Crime Statistics, havia cerca de 9 milhões de propriedade
crimes cometidos nos Estados Unidos, em 2012, o ano mais recente para o qual existem estatísticas disponíveis. Os dias de
vivendo em uma rua tranquila, onde os vizinhos se conheciam e você pode deixar sua porta destrancada enquanto você passou
ao trabalho, estão muito longe.
Felizmente, nós somos capazes de proteger as nossas casas e também para assistir as casas com câmeras de ambos ainda e vídeo
de que
são montados onde precisamos deles e capaz de live-streaming de vídeo que a qualquer dos nossos dispositivos sempre
conectados,
tais como os nossos laptops ou telefones. Podemos equipar nossa casa com sensores, como sensores de movimento e interruptores
de viagem, e
utilizar as informações recolhidas a partir desses sensores como um gatilho para executar determinadas ações. Se você está
disposto a gastar o
dinheiro, você pode instalar sistemas que fazem de tudo: proteger sua casa de fogo e os assaltantes para alertando-o para
monóxido de carbono (CO) vazamentos.
Quando isso acontece, o Raspberry Pi é perfeito para fazer todas essas coisas para um pouco mais barato do que uma rede inteira
de câmeras de circuito fechado e o sistema de computador para executá-los. Não é um monte de poder de computação é
necessário é pequeno-
suficiente e poder-mesquinho o suficiente para realmente ser instalado no local, ele pode tirar fotos de momentos importantes
através da sua
onboard câmera, e porque ele está conectado a uma rede doméstica pode alertá-lo quando algo está errado. Perfeito.
Sim, você pode obter um cão de guarda. Na verdade, isso é o que muitas pessoas (alguns diriam normais de pessoas) fazer. Mas
vamos dar
um momento para considerar os prós e os contras de possuir um cão contra possuir um Raspberry Pi. Então, podemos começar a
construir
nosso sistema de segurança em casa com o Raspberry Pi.

Cães como Segurança


Cães (Canis lupus familiaris) são comumente conhecido como o melhor amigo do homem, e eles têm sido usados como cães de
guarda para nigh
em 10.000 anos. Eles são descendentes do lobo e vêm em todas as formas e tamanhos, desde o Chihuahua pint-sized para
o gigante Great Dane.
Um dos trabalhos do cão tem sido para proteger a casa contra intrusos. Eles são intensamente leal e protetor
de seus membros da família humana e seu "den" e vai latir, e até mesmo ataque, os invasores. Para acompanhar esse
comportamento,
eles exigem comida, às vezes bastante dele. E, enquanto eles são muitas vezes bonitinho e fofinho, e grande em manter o seu
pés quentes em noites frias do inverno, o fato de que eles têm para comer significa, infelizmente, que têm que eliminar o
bem uma empresa fedido para todos os interessados.
Os cães também são incapazes de ser atualizado. A última vez que eu tentei ligar um cabo USB para o meu cão, ela gritou. E
Mesmo que os cães podem ser muito bonito quando enfiar a cabeça para fora da janela quando você está dirigindo pela estrada,
você não pode atualizar os seus drivers ou usar um gerenciador de pacotes para baixar um programa de eliminação de gás mais
eficiente.
O resultado? Cães são grandes para vigiar a casa, mas eles têm algumas deficiências graves.
Capítulo 8 ■ O Sistema de Home Security
Raspberry Pi como Segurança
O Raspberry Pi (Rubus strigosus Pi) é comumente conhecido como o melhor amigo de o hobby-roboticista, e ele tem sido usado
para fazer todos os tipos de projetos off-the-wall por pelo menos dois anos inteiros. Estes dispositivos são descendentes da Acorn
Máquina RISC no início de 1980 e, como mencionado anteriormente, vêm em duas versões: a versão A e B. versão
O Raspberry Pi não tem realmente um trabalho específico, mas como um computador, é bem sabido que ele vai seguir tudo
instruções dado a uma falha. Se você programá-lo para encontrar todos os números primos entre 1 e 10000, ele irá fazê-lo; no
Por outro lado, se você diga a ele para continuar a encontrar números primos até um porco voa em cima, ele continuará até que a
computação
seu processador queima ou até Porky cresce asas. Para fazer essas proezas incríveis, o Pi não tem que comer, nem
tem que eliminar. O trade-off para a falta de metabolizar substâncias orgânicas é que o Pi não pode manter seus pés
quente nas noites frias de Inverno.
Você pode atualizar um Pi, no entanto, com o uso criterioso do sudo apt-get install comando. O Pi recebe um USB
entrada, e pode ser programado para usar sensores para assistir a sua casa e seus jardins circundantes, e para alertá-lo se
essas defesas são violados. Infelizmente falando da experiência pessoas dão-lhe muito olhares estranhos se você dirigir
pela rua com seu Pi pendurar a cabeça para fora da janela, mas não há nenhum problema de gás malcheiroso, portanto, não é isso.
O resultado? O Raspberry Pi tem algumas falhas graves, mas aqueles que podem ser superados para permitir que ele assista
sobre sua casa. E já que este é um livro sobre o Pi, que é o que vamos usar.

Usando uma rede de sensores


O sistema de segurança em casa (e do centro de tempo em outro capítulo) é baseado no conceito de uma rede de sensores.
Se um computador é como um cérebro, os sensores são como os sentidos que lhe permitem recolher informações junto e interagir
com o
mundo físico. Câmeras são como olhos, interruptores reed são como pontas dos dedos, e interruptores de pressão são como os
dedos que têm
foi pisado por um cão desajeitado. Os robôs não seria nada sem os seus sensores, e qualquer robô cérebro, por exemplo,
é inteiramente dependente do que a rede de sensores.
Isso, como uma questão de fato, é uma das coisas mais legais sobre o Pi sua capacidade de interagir facilmente com as coisas
físicas
como sensores. A maioria dos desktops e laptops modernos tiveram todas as suas portas interessantes, tais como a paralela e serial
embora tomadas portas, à esquerda com nada, mas algumas portas USB solitárias e uma porta Ethernet. Isto os deixa aleijado,
incapaz
para interagir facilmente com o mundo "real". Enquanto isso, o Pi pode ser conectado diretamente a um sensor de movimento
através de seus pinos GPIO
e que você saiba, com algumas linhas de código, se Slenderman está rastejando sobre nos arbustos atrás de seu quarto.
No nosso sistema de segurança, nós vamos usar vários sensores: um sensor de movimento infravermelho, um interruptor de
pressão, um
sensor magnético, e uma cana, ou interruptor de limite. O sensor de movimento pode ser colocado em qualquer lugar na
propriedade. A pressão
interruptor pode ser útil colocado dentro de uma porta, onde um intruso é provável para a etapa. O sensor magnético pode ser
utilizada
para detectar se uma janela é aberta, e o interruptor de lâmina pode ser usado para determinar se alguém toca um fio de viagem.
Nós podemos
usar a câmera onboard do Pi para tirar fotos se quaisquer sensores são tropeçou e acessar essas fotos a qualquer momento. Última,
nós podemos
usar nossa rede de casa para ter o Pi enviar uma mensagem de texto e / ou mensagem de e-mail deve ser algo interessante
acontecendo em nossa segurança de rede-tipo de como a empresa de segurança chamando você se detectar um alarme.
Esta é a rede de sensores que estará trabalhando com. É uma espécie de base, mas também é infinitamente expansível. E embora
vamos estar usando um de cada tipo de sensor, você pode facilmente adicionar mais se você quiser (um sensor magnético para
cada
janela em sua casa, por exemplo).

Compreendendo uma Pulldown Resistor


Um conceito importante saber e lembrar sempre que usar uma entrada com quase qualquer circuito é a do flutuante
de entrada e o resistor suspenso (ou pullup). Basicamente, quando um pino (tal como um pino GPIO na Pi) é configurado para ler
a entrada de uma fonte de tensão, tal como um sensor, é o que se chama uma entrada flutuante até que alguma tensão é lido no
pino.
Antes que um sinal de tensão é enviada a partir do sensor, o nível no pino poderia ser quase nada. Esta não especificada, flutuante
tensão pode estragar a sério com o seu programa: se você já programou a seqüência de autodestruição para ativar quando
o pino lê um valor 2.3V, e o valor flutuante acontece para estar em 2.3V, BOOM! Precisamos de uma maneira de definir o pino
para um
valor conhecido (tais como uma elevada lógica ou um LOW lógica) quando nada está sendo lido a partir dele.
Capítulo 8 ■ O Sistema de Home Security
A maneira de resolver este problema é usar um pullup ou pulldown resistor. Este resistor conecta o pino de entrada para
quer Vcc ou GND (pullup ou pulldown, respectivamente). Dessa forma, se não houver entrada de entrar, o pino vai ler qualquer
Vcc ou 0, e sabemos que valor. Isto é feito frequentemente com uma resistência física (10k ou 100KΩ, normalmente), mas muitos
placas de desenvolvimento (incluindo o Pi) vai deixar você fazê-lo através de software de uma enorme vantagem quando você
está trabalhando com
espaço limitado. Usando a biblioteca GPIO, você pode declarar um pino como entrada e, ao mesmo tempo, "puxar para baixo"
como se com um
resistor suspenso com a seguinte sintaxe:
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
Isso define o valor lido no pino # 11 um preço tão baixo até que ele recebe tensão do sensor; nesse ponto, que é de tensão
puxou ALTO, e o programa pode agir. Quando o valor ALTA desaparece, o pino é novamente puxado para baixo até que o
processo de
repete. Um resistor pullup faz quase a mesma coisa, exceto o pino é puxado HIGH (Vcc), até que uma entrada é exibida.

A Lista de Compras de Peças


A fim de construir um sistema de segurança funcionando, existem algumas peças que você vai precisar de:
• A Raspberry Pi (obviamente) e adaptador de energia
• A dongle USB sem fio se você quer ir sem fio com o Pi
• módulo de câmera Raspberry Pi
• Interruptor de pressão (como http://bit.ly/Owc8aN, por exemplo)
• Sensor magnético (como http://bit.ly/1cis71c, por exemplo)
• sensor de movimento (tais como http://bit.ly/1c35pQp, por exemplo)
• interruptor Reed (como http://bit.ly/1k6n2RM, por exemplo)
• Grande carretel de cabo Ethernet (frisado não termina é necessário comprar a granel para economizar dinheiro)
• solda, ferro de solda, e jumpers variado fios e conectores
Algumas destas peças são opcionais, é claro; tudo depende de quão profundo você quer que seu sistema de segurança para ser.
Você pode até mesmo adicionar itens à sua lista como seu sistema de segurança cresce. Cada sensor apenas adiciona a sua rede de
sensores,
expandir o alcance do seu sistema.
Conectando-se a rede sem fio
Quando você configurar sua Pi como o principal controlador do seu sistema de segurança, terá de se conectar com a sua casa de
rede, a fim de permitir que você acessar remotamente e administrá-lo e enviar-lhe uma mensagem de texto para o informar sobre
uma infração. Quando você se conectar à sua rede, você tem a opção de ir com ou sem fio. Cada opção tem a sua
prós e contras, é claro, mas eu sugiro que você usar uma conexão sem fio. Isto é principalmente por duas razões: uma sem fio
conexão permite que você coloque o Pi em qualquer lugar sem ter que executar o cabo Ethernet à sua localização, e um sem fio
conexão também é mais segura com ele, um assaltante pode cortar uma conexão física com o Pi para torná-lo inútil, mas não é
assim com
uma conexão sem fio.
A primeira coisa que você precisa é um bom dongle USB sem fio. Um popular é a Edimax EW-7811UN (mostrado na
Figura 8-1), disponível na Amazon por apenas alguns dólares. Ele funciona bem, é fácil de configurar e não requer
um hub USB para operar bem no Pi.

Capítulo 8 ■ O Sistema de Home Security


Figura 8-1. O adaptador sem fio Edimax
Em seguida, você vai querer configurar o Pi ter um endereço IP estático. Isto irá permitir que você efetue login na sua Pi
remotamente a partir de
em qualquer lugar, independentemente de ele ter sido desligado desde o seu último login remoto. Se você deixar o Pi para receber
o seu
Endereço IP dinamicamente a partir de seu roteador doméstico, é possível que o endereço IP será alterado se o Pi tem para
reiniciar, significado
você vai ser capaz de log in (porque você não vai saber o que o novo endereço é).
Felizmente, a criação de um IP estático para a conexão sem fio do seu Pi não é difícil. Você precisa conhecer a sua rede de
máscara de rede (normalmente, seja 255.255.255.0 ou 255.255.0.0) e seu endereço de gateway (normalmente, o endereço do seu
roteador,
tais como 192.168.2.1). Você também vai precisar do seu valor Bcast, onde pode encontrar digitando ifconfig na linha de
comando.
Abra seu arquivo / etc / network / interfaces para edição digitando
sudo nano / etc / network / interfaces
Você vai ter que usar o sudo, porque o arquivo é editável apenas pelo usuário root. Você deverá ver uma linha que lê
iface wlan0 inet dhcp
Mudar isso para ler
iface wlan0 inet static
e adicione o seguinte abaixo:
endereço 192.168.2.50 (ou qualquer outro endereço que você quer, obviamente)
255.255.255.0 máscara de rede (ou sua máscara de rede)
192.168.2.0 rede (local da sua rede)
transmitido 192.168.2.255 (o seu valor Bcast de mais cedo)
gateway de 192.168.2.1 (o endereço IP do seu roteador)
Salve o arquivo e reinicie o Pi. Quando se trata de volta on-line, ele deve ter o endereço que você check-double-especificado
executando um comando ifconfig. Agora você tem um endereço IP estático. Anotá-la para que você não esqueça. Agora não
importa onde você acaba colocando o Pi em sua rede de segurança, você vai ser capaz de ligar-se remotamente para administrá-lo.
Para usar o IP estático, você precisará de um servidor SSH em execução no Pi. Dependendo de como você configurar seu Pi, você
pode ter uma corrida já. A maneira mais fácil de obter o seu servidor SSH instalado e funcionando é executar o seu Raspi-config
ferramenta digitando
sudo Raspi-config
na linha de comando. Você será saudado com a tela do Raspi-config (como mostrado na Figura 8-2).

Capítulo 8 ■ O Sistema de Home Security


Figura 8-2. A ferramenta Raspi-config
Cursor para baixo para a opção # 8, Opções avançadas, pressione a tecla seta para a direita para destacar <Selecione> e pressione
Return.
Em seguida, o cursor para baixo a # 4 SSH, e mais uma vez destacar <Selecione> e pressione Return. Certifique-se <Habilitação>
é destaque no
próxima tela (Figura 8-3) e pressione Return.
Figura 8-3. Ativando o servidor SSH

Capítulo 8 ■ O Sistema de Home Security


Em seguida, de volta para fora da ferramenta Raspi-config selecionando <Finish> e pressionando Enter. Fazer um reboot,
digitando
sudo reinicialização
e seu servidor SSH deve ser instalado e funcionando. Agora você pode efetuar login remotamente em seu Pi de qualquer lugar. Se
você estiver usando
uma máquina Windows, você precisa baixar a ferramenta livre PuTTY, a fim de fazer login na sua Pi. Se você estiver usando um
Mac ou
Caixa de Linux, ssh estiver habilitado. Basta usar o seguinte comando
ssh pi -l <seu pi "s endereço IP>
e entrar framboesa no prompt de senha, e você está dentro! Com PuTTY, digite seu endereço de IP do Pi na caixa, adicione a
usuário e senha e clique em Conectar. Agora você pode administrar sua Pi através da linha de comando a partir de qualquer lugar.

Acessando os pinos GPIO


Como afirmado anteriormente, e como você viu se você leu alguns dos outros Capítulos deste livro, pinos GPIO do Pi são o
forma como a interface do Pi com o mundo físico, tais como sensores, servos, motores e luzes. A fim de fazer isso, usamos
uma biblioteca Python especialmente projetado para esta finalidade: RPi.GPIO.
A fim de trabalhar com a biblioteca, você pode ter que instalar manualmente duas outras bibliotecas. (Depende de qual
versão do Raspbian você está correndo.) Primeiro verifique se o seu Pi é até à data, digitando
sudo apt-get update
e, em seguida, instalar os pacotes, digitando
sudo apt-get install python-dev
e
sudo apt-get install python.rpi-GPIO
que pode (deve) ser instalado. Agora, a fim de acessar o Pi, você chamar
importação RPi.GPIO como GPIO
nas primeiras linhas de seu programa, e depois configurá-lo digitando
GPIO.setmode (GPIO.BOARD)
que permite identificar os pinos de como eles são rotulados em um diagrama de pinagem padrão (como mostrado na Figura 8-4).

Capítulo 8 ■ O Sistema de Home Security


Figura 8-4. O diagrama de pinagem de pinos GPIO do Pi
■ Nota Tenha em mente que com GPIO.setmode (BOARD), quando você se refere a pino 11, na verdade você está
se referindo à física
pino # 11 (que se traduz em GPIO17 no diagrama na Figura 8-4), não GPIO11, que se traduz para o pino físico # 23.
Depois de definir o modo, você pode então definir cada pino para ser uma entrada ou uma saída. Os usuários do Arduino vai
provavelmente reconhecem o conceito aqui:
GPIO.setup (11, GPIO.OUT)
GPIO.setup (13, GPIO.IN)
e assim por diante. Depois de definir um pino como uma saída, você pode então enviar tensão para ele (ligá-lo) usando
GPIO.output (11, 1)
Capítulo 8 ■ O Sistema de Home Security
ou
GPIO.output (11, True)
e, posteriormente, desligá-lo usando
GPIO.output (11, 0)
ou
GPIO.output (11, False)
Quando você configurar um pino como uma entrada, lembre-se de definir um pullup ou pulldown resistor como discutido
anteriormente.
Configurar o sensor de movimento
Uma das partes mais importantes de uma rede de segurança em casa é provável que o sensor de movimento (mostrado na Figura
8-5) -com uma
algumas ressalvas. Você não pode confiar exclusivamente em seu sensor de movimento, porque no momento em que fizer, ele vai
ser compensado por um bairro
gato, ou possivelmente um Yeti (não necessariamente uma coisa ruim.) Se, no entanto, você usá-lo, além de todos os outros
sensores, você pode
ter boa sorte com seus resultados.
Figura 8-5. O sensor de movimentos
O sensor que estamos usando, por Parallax ou um clone próximo, detecta movimento por mudanças na detecção infravermelha
(calor)
níveis emitidos por objetos no ambiente circundante. Como a maioria dos sensores, que, em seguida, sinaliza que a mudança tem
sido
detectados por emitir um sinal ou "HIGH" "1" no seu pino de saída. Ele tem três pinos: Vcc, Gnd, e Output.
Os pinos são (da esquerda na Figura 8-5) OUT, + e -. Um recurso interessante deste sensor em particular é que ele pode usar
qualquer tensão de 3V a 6V. Para usar e testá-lo, conecte o (-) pino para pino terra do Pi (pino # 6), conecte o pino (+) para
pino 5V do Pi (pino # 2), e conectar o pino OUT a um dos pinos GPIO.
Para testar o sensor e nossa força de codificação, vamos começar por definir os pinos GPIO em conformidade. Podemos usar um
configuração simples para testar o nosso código-um LED em uma placa de ensaio que se acende quando o sensor é acionado.
Começar de novo
Script Python (vamos chamá-lo motion.py) com nano motion.py e digite o seguinte:
importação RPi.GPIO como GPIO
tempo de importação
GPIO.setwarnings (False) #eliminates lancinante da biblioteca
GPIO.setmode (GPIO.BOARD)

Capítulo 8 ■ O Sistema de Home Security


GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup (13, GPIO.OUT)
while True:
Se GPIO.input (11):
GPIO.output (13, 1)
outro:
GPIO.output (13, 0)
Isso é tudo para o código de teste! A fim de testá-lo, primeiro conectar o pino (+) sobre o sensor ao pino # 2 sobre o Pi. Conectar
o pino OUT ao pino # 11 sobre o Pi. Conecte o - pin a uma linha de base comum sobre a sua placa de ensaio (). Finalmente,
conecte
pino nº 13 do Pi para a perna positiva de sua LED (através de um resistor), e conecte a perna negativo do LED para o
linha de base comum. Você deve acabar com algo como você vê na figura 8-6.
Figura 8-6. Testando o sensor de movimento
Quando você executar o script anterior (lembrando-se de usar o sudo porque você está acessando os pinos GPIO), o LED
deve acender quando você mover sua mão ao redor do sensor, e em seguida, ele deve ir para fora outra vez depois de alguns
segundos de
não movimento. Se isso não funcionar, verifique as conexões e sua peças de um LED queimada pode causar todos os tipos de
dores de cabeça de solução de problemas, acreditem!
Deixar o sensor conectado como ela é, como vamos usá-lo em nosso sistema, e vamos passar para o interruptor de lâmina.

Capítulo 8 ■ O Sistema de Home Security


Configurando o Interruptor de Lâmina
A cana, ou limite, interruptor é uma ferramenta útil em muitas situações, não menos do que sendo o nosso sistema de segurança.
É do
frequentemente utilizado por robôs para determinar os limites do movimento, se está dirigindo em uma parede ou fechar uma
pinça em torno de
um objeto. Seu conceito é simples: o interruptor é normalmente aberto, deixando nenhuma tensão por meio, e tem uma armadura
saliente do corpo do detector, como uma alavanca comprida. Quando um objeto exterior pressiona a alavanca, ele fecha o
alternar, o envio de tensão através do circuito, no nosso caso, para o pino de INPUT do Pi que está a ouvir um sinal. o
interruptor de limite que estamos usando é também chamado de "interruptor de ação rápida sub-miniatura." (Ver Figura 8-7.)
Figura 8-7. O interruptor de limite
O longo braço saliente do corpo do interruptor permite que objetos que estão longe para fechar o comutador
contactea à pequena protuberância saliente do switch. Ele tem três terminais, mas estamos indo só para usar dois, por que
estamos interessados somente em quando o interruptor fecha.
No nosso caso, vamos usar um interruptor de limite não para determinar quando um objeto se aproxima demais, mas para
determinar se um
fio de viagem tem sido puxado. Você pode montar o interruptor na parede e executar um fio fino ou linha de pesca da parede
oposta
a alavanca do interruptor. Posicioná-lo de modo que se alguém entra na lista de discussão, eles vão puxar a alavanca para baixo,
ativando o interruptor.
Porque nós estamos usando um interruptor físico aqui, em vez de um sensor como o detector de movimento, é importante que eu
apresentá-lo ao conceito de debouncing. Um aspecto comum de switches físicos é que porque eles são muitas vezes feitas
de metais primavera, quando eles são ativado pela primeira vez que eles tendem a saltar para além de um ou mais vezes antes de
fazer uma constante
contato. O resultado é uma muito rápido de ligar-desligar-ligado-desligado-ligado-desligado "Chatter" antes que a tensão se
instala a uma alta ou baixa constante.
Para combater isso, nós Debounce o interruptor por ler a partir dele somente quando ele não é mais indo e voltando, assim:
tempo de importação
prev_input = 0
while True:
#take uma leitura
entrada = GPIO.input (11)
#if a última leitura foi baixa e esta alta, impressão
if ((não prev_input) e entrada):
print ("botão pressionado")
#update entrada anterior
prev_input = input
#slight pausa para Debounce
time.sleep (0,05)
Capítulo 8 ■ O Sistema de Home Security
Este pequeno script ilustra o conceito muito bem. Ele ignora pressionar um botão, se ocorrer a menos de 0,05 segundos
após a última.
Então, para testar a nossa chave, vamos ligá-lo a alguns pinos GPIO e certificar-se de que podemos ler a entrada quando seu
estado
alterar. Basta usar o interruptor, ligue o pino de alimentação do Pi (# 2) para pino mais à esquerda do interruptor conforme
mostrado na Figura 8-7.
Em seguida, conecte o meio pin à sua de Pi pin # 11. Tente o seguinte código digitando
tempo de importação
importação RPi.GPIO como GPIO
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
prev_input = 0
while True:
entrada = GPIO.input (11)
if ((não prev_input) e entrada):
print "botão pressionado"
prev_input = input
time.sleep (0,05)
Quando você executar este script (lembrando-se de usar o sudo), pressionando o interruptor irá enviar tensão diretamente através
dele
do pino a pino # 2 # 11, registrando assim tão alto no pino # 11. É um sinal debounced, ea Pi deve imprimir "Botão
pressionado "quando você pressiona o botão. Parabéns! Você é capaz de ler quando uma tecla é pressionada!
Vamos passar para o próximo switch.
Configuração do interruptor de pressão
O interruptor de pressão é muito semelhante ao interruptor limite, que parece muito diferente. (Ver Figura 8-8.)
Figura 8-8. O pressostato
Em vez de uma alavanca física e botão, uma almofada quadrada que é usado simplesmente registra pressão como uma mudança
na tensão.
Por esta razão, é ainda mais fácil de ligar o interruptor de limite. Conecte seu pino do Pi # 2 com uma das ligações, e
conecte a outra vantagem para o pino # 11. Em seguida, executar o mesmo script como você fez para o fim de curso, e testá-lo,
pressionando para baixo
no teclado com o dedo. Voilá! Você está lendo agora um valor de uma chave de pressão! Isto é perfeito para a leitura uma
passo debaixo de um tapete de boas-vindas, por exemplo.

Capítulo 8 ■ O Sistema de Home Security

Ligar o Sensor Magnético


O sensor magnético (mostrado na Figura 8-9) é um pequeno dispositivo que, enquanto não utilizada do lado de fora de certos
específica
aplicações, pode vir a calhar para aplicações como o nosso. Ele mede o campo magnético circundante e envia um
sinalizar quando que as mudanças de campo. Por essa razão, é muito bom em determinar quando a posição relativa de duas peças
de metais foram alterados, por exemplo.
Figura 8-9. O sensor magnético
A fim de se certificar de que não obter quaisquer leituras falsas, podemos usar alguns pequenos ímãs externos para influenciar o
sensor; o que estamos usando vem com dois pequenos ímãs de neodímio para esse fim.
Para testar o nosso sensor magnético, podemos novamente usar o nosso código switch.py temos vindo a utilizar. Ligue os fios de
ligação
que veio com o sensor ao bloco conector do sensor, e, em seguida, conectá-los ao seu Pi: vermelho para o pino # 2, preto
ao pino # 6, e branco ao pino # 11. Agora é só alterar o código para ler
tempo de importação
importação RPi.GPIO como GPIO
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
prev_input = 0
while True:
entrada = GPIO.input (11)
if ((não prev_input) e entrada):
print "O campo mudou"
prev_input = input
time.sleep (0,05)
e executar o script. Seu terminal permanecerá em branco até que você acena o ímã passado o sensor. (Você pode ter que
experimentar com diferentes distâncias e velocidades. Minha experiência é que os ímãs têm de passar bem de perto a
registre-se.) Nesse ponto, ele vai dizer "campo mudou." Depois de um pouco de experimentação, você saberá exatamente onde
você terá
para montar o ímã para que a mudança nas leituras de campo para influenciar seu sistema de segurança. Agora você pode montar
o sensor de um painel de uma janela deslizante, por exemplo, um ímã e por outro painel, e se a janela
slide aberto, o sensor magnético irá registrar o movimento do ímã.

Capítulo 8 ■ O Sistema de Home Security


Configurando Câmara de Pi
Por fim, uma das características que torna o Pi atraente como eixo central do sistema de segurança é a sua capacidade de tirar
fotos de
um pequeno, câmera embutida. Enquanto isso significa que o Pi deve ser posicionado em uma localização estratégica, a fim de
pegar
nada de interessante, o Pi é tão pequena que encontrar um bom lugar para ele não deve ser um problema.
A fim de tirar fotos, você terá que ter dois componentes que trabalham em seu Pi: o acesso sem fio e câmera.
Discuti a instalação sem fio mais cedo; a câmera pode ser configurada com a ferramenta Raspi-config, se você não tem
configurou-o já.
Depois de ativar a câmera, você tem dois comandos que você pode usar: raspistill (para capturar imagens) e
raspivid (para captura de vídeo). Cada um pode ser usado com vários flags e opções para alterar o tamanho do quadro, a taxa de
capturar,
e outras configurações.
Nós estamos interessados em tirar fotos estáticas, no entanto; streaming de vídeo através do feed ao vivo, enquanto possível,
requer alguns
ferramentas de software extra que pode ser difícil de configurar. Tirar uma foto é uma simples chamada para raspistill do
comando
linha. E enquanto não há nenhuma biblioteca ou módulo Python disponível como esta escrito a usar a câmera, podemos usar o
chamada de biblioteca de subprocess chamada de importação para fazer a mesma coisa. Quando você precisa para tirar uma foto
no seu script,
usar essas duas linhas simples:
de subprocess chamada de importação
ligar para (["raspistill -o image.jpg"], shell = True)
A imagem ainda, identificado como "image.jpg", será armazenado no diretório atual. Podemos colocar esta linha de tirar fotos em
um
take_pic () função e chamá-lo sempre que um sensor é acionado. Temos, então, a evidência, devemos precisar dele para
corroboração!

Enviando uma mensagem de texto a partir do Pi


Na minha opinião, ter seu Pi enviar-lhe uma mensagem de texto quando algo incomum acontece é uma das melhores partes
o projeto, e é particularmente útil se você estiver indo para fora da cidade. Uma notificação do seu Pi pode deixá-lo saber que
você
precisa chamar o seu vizinho (ou a polícia) e tê-los verificar em sua casa. É realmente muito simples: o Pi usa o
rede local para enviar uma mensagem de e-mail, que é então traduzido por sua operadora de celular em uma SMS, ou mensagem
de texto.
Você vai precisar de uma conta de e-mail que é acessível via web; a maioria de nós tem uma conta do Gmail ou Yahoo, por
exemplo. Você vai
também precisa saber como enviar um texto via e-mail com sua operadora de celular. Cada transportador é ligeiramente diferente,
mas a base
conceito é o mesmo, enviando um email para um determinado número (<MOBILE_NUMBER> @ txt.carrier.net, por exemplo)
tem
esse e-mail fornecido como um texto. Eu uso AT & T, e se você enviar um email para 19075551212@txt.att.net, ela será entregue
como
o texto. Então, usando a biblioteca smtplib do Python, você pode enviar um e-mail para o seu telefone.
É provavelmente mais fácil se eu apenas mostrar-lhe com o seguinte código:
def send_text (str):
HOST = "smtp.gmail.com"
ASSUNTO = "Break-in!"
AO = "xxxxxxxxxx@txt.att.net"
DE = "python@example.com"
text = str
BODY = string.join (("From:% s"% FROM, "Para:% s"% TO, "Assunto:% s"% ASSUNTO, "", texto), "\ r \ n")
s = smtplib.SMTP ("smtp.gmail.com", 587)
s.set_debuglevel (1)
s.ehlo ()
s.starttls ()
s.login ("username@gmail.com", "minhasenha")
s.sendmail (DE, [TO], CORPO)
s.quit ()

Capítulo 8 ■ O Sistema de Home Security


Chamar a função send_text () com uma string como "OMG eu estou sendo roubado!" Irá enviar-lhe uma mensagem de texto.
Obviamente, esse código é projetado para trabalhar com a AT & T, e usa uma conta do Gmail. Você vai precisar de modificá-lo
como necessário para
seu provedor de suporte e-mail. acesso SMTP do Gmail é através da porta 587, como você pode ver na linha 9 no código anterior;
esta pode ser diferente para o Yahoo ou MSN. Você pode chamar esta função quando detectar uma entrada em qualquer um dos
seus sensores, e você
pode até mesmo ajustar a seqüência de caracteres enviados de acordo com a qual sensor está desarmado.
Implementando o Callback
Há uma idéia significativa à esquerda para explorar neste projeto, e que é o conceito de retorno de chamada. Você pode ter
reparou que não há nenhuma maneira fácil de verificar cada chave; você tem que continuar a "poll" cada chave e esperar que nada
incomum acontece enquanto você está fazendo outra coisa. Não é um grande negócio se você tem apenas três ou quatro
interruptores e
sensores, mas você deve começar a adicionar à sua rede, o atraso entre algo acontecendo e ser notificado
sobre ele pode ficar difícil de manejar rapidamente; interruptor de limite # 2 poderia tropeçar enquanto você está verificando
sensor magnético nº 16, e
você não vai saber sobre isso por mais dois segundos. Por esse tempo, é claro, o ladrão pode ter escapado pelo fio de viagem
e estar bem no seu caminho para matar toda a sua família ou o roubo de Star Wars recordações.
Felizmente, Python (e do Raspberry Pi) tem uma resposta para esse problema de verificação de switch. É incorporado no
RPi.GPIO biblioteca: a. Callback interrupção rosca O que isso nos permite fazer é iniciar uma discussão programa diferente para
cada switch. Cada segmento vai entrar em um modo de "espera", sem fazer nada, enquanto o resto do programa (e o resto
dos fios) ir sobre seus negócios. Se e quando o interruptor fica desarmado, ele imediatamente emite uma chamada de retorno, ou
interromper, ao programa principal para deixá-lo saber ("Hey! Eu tenho tropeçou aqui!") e execute qualquer função que
quer que seja. Desta forma, podemos ter certeza de que não vai perder um importante pressione o botão ou interruptor de viagem.
Enquanto isso, todo o
outros tópicos continuar seu padrão de exploração. Na parte inferior deste padrão, as funções de um interruptor como uma base;
Se aquele
interruptor é acionado, você pode terminar o programa. Caso contrário, ele continua dentro de um loop while.
Esta funcionalidade de chamada de retorno é realizado utilizando qualquer uma das duas funções: GPIO.wait_for_edge () ou
GPIO.add_event_detect (). GPIO.wait_for_edge () faz exatamente isso, espera por uma borda subindo ou caindo em qualquer
pin especial e, em seguida, atua quando detecta que borda. GPIO.add_event_detect (), por outro lado, para uma espera
subindo ou caindo borda em um pino em particular e, em seguida, chama a função declarada em seus parâmetros. Você pode vê-
los
tanto em uso no código final mais tarde neste cCapítulo. Esteja ciente de que para cada sensor ou interruptor, temos um exclusivo
callback função de um que é exclusivo para esse sensor para que possamos saber exatamente quais interruptor foi acionado.

Conectando todos os bits


Agora que você determinou como usar todas as peças desse quebra-cabeça, vamos rapidamente sobre como conectar tudo.
Você vai precisar usar o cabo Ethernet para fazer todas as suas conexões; é forte, fácil de trabalhar com, e (principalmente)
à prova d'água. Tira o invólucro exterior para alcançar os fios dentro, e pique todos, mas os dois ou três fios que você precisa
conectar cada sensor para sua Pi. Você vai precisar de uma pequena placa de ensaio para colocar ao lado do Pi, porque tudo deve
compartilhar um terreno.
Encontre um bom lugar para montar sua Pi, onde você pode ligá-lo (sem se preocupar com baterias) e onde você pode
montar a câmera para que ele possa tirar boas fotos da ação. Depois de encontrar um lugar, você pode usar putty cartaz
para manter tudo no lugar.
Finalmente, encontrar bons lugares para todos os seus sensores. Lembre-se, eles não precisam estar em vista o Pi: enquanto você
pode executar o cabo Ethernet para eles, é um bom local. Conecte os cabos de forma segura e de tal forma que ninguém tropeça
eles. Ligue todos os fios negativos para a sua fila terreno comum em sua placa de ensaio, e conectar cada positivo
fio para um pino GPIO. Nesta fase, provavelmente seria uma boa idéia para escrever o que sensor é ligado ao pino de modo que
que você pode fazer referência a ela em seu código.

Capítulo 8 ■ O Sistema de Home Security


O código final
Assim que completa todas as partes individuais deste projeto. Tudo o que resta é colocá-los todos juntos em seu código final,
assim (você pode baixar o arquivo de código final, chamado home_security.py em apress.com):
tempo de importação
importação RPi.GPIO como GPIO
de subprocess chamada de importação
import string
smtplib importação
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
time_stamp = time.time () #For debouncing
pins #set
#pin 11 = sensor de movimento
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
#pin 13 = sensor magnético
GPIO.setup (13, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
#pin 15 = fim de curso
GPIO.setup (15, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
#pin 19 = pressostato
GPIO.setup (19, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
take_pic def (sensor):
ligue para (["raspistill -o imagem" + Sensor + ".jpg"], shell = True)
time.sleep (0,5) #WAIT 1/2 segundo para pic a serem tomadas antes de continuar
send_text def (detalhes):
HOST = "smtp.gmail.com"
ASSUNTO = "Break-in!"
AO = "xxxxxxxxxx@txt.att.net"
DE = "python@mydomain.com"
text = detalhes
BODY = string.join (("From:% s"% FROM, "Para:% s"% TO, "Assunto:% s"% ASSUNTO, "", texto), "\ r \ n")
s = smtplib.SMTP ("smtp.gmail.com", 587)
s.set_debuglevel (1)
s.ehlo ()
s.starttls ()
s.login ("username@gmail.com", "minhasenha")
s.sendmail (DE, [TO], CORPO)
s.quit ()
motion_callback def (canal):
time_stamp mundial
time_now = time.time ()

Capítulo 8 ■ O Sistema de Home Security


if (time_now - time_stamp)> = 0,3: #check para debouncing
print "detector de movimento detectado."
send_text ("detector de movimento")
take_pic ("movimento")
time_stamp = time_now
limit_callback def (canal):
time_stamp mundial
time_now = time.time ()
if (time_now - time_stamp)> = 0,3: #check para debouncing
print "Fim de curso pressionado."
send_text ("switch Limite")
take_pic ("Limite")
time_stamp = time_now
magnet_callback def (canal):
time_stamp mundial
time_now = time.time ()
if (time_now - time_stamp)> = 0,3: #check para debouncing
print "Sensor magnético disparou."
send_text ("Sensor magnético")
take_pic ("ímã")
time_stamp = time_now
#Corpo Principal
raw_input ("Pressione Enter para iniciar o programa \ n")
GPIO.add_event_detect (11, GPIO.RISING, callback = motion_callback)
GPIO.add_event_detect (13, GPIO.RISING, callback = magnet_callback)
GPIO.add_event_detect (15, GPIO.RISING, callback = limit_callback)
Interruptor # pressão termina o programa
# Você pode facilmente adicionar um retorno de chamada única para o interruptor de pressão
# E adicionar outro interruptor apenas para desligar a rede
experimentar:
print "Esperando por sensores ..."
GPIO.wait_for_edge (19, GPIO.RISING)
exceto KeyboardInterrupt:
GPIO.cleanup ()
GPIO.cleanup ()

Resumo
Neste cCapítulo, você aprendeu sobre o que são os sensores, o conceito de uma rede de sensores, e como ligar diferentes
sensores para pinos GPIO do seu pi. Você configura o interruptor de limite, interruptor de pressão, sensor magnético, e sensor de
movimento
(que também usar no brinquedo gato Pi-alimentado no próximo cCapítulo). Com o conhecimento que você ganhou aqui, você
agora
têm a capacidade de criar um sistema de segurança de tamanho completo, com a sua amplitude limitada apenas pela quantidade
de sensores tiver
e quanto fio você tem que colocá-los todos juntos.

Capítulo 9
O Toy Cat
A maioria das pessoas são bastante familiarizado com o "gato que persegue o pequeno ponto vermelho" paradigma. É tão popular
que até tinha um curto
cena numa das Shrek filmes. Alguns gatos perseguir o ponto de laser até cair. Alguns só vai persegui-lo por um pouco
enquanto. Em qualquer caso, qualquer pessoa que tenha um gato provavelmente já tocou com um ponteiro laser com o seu amigo
felino em algum ponto.
Mas não seria bom se você pudesse entreter seu gato quando você não está lá? Um ponteiro laser, ao contrário do que você
poderia pensar, se não tem que ser mantido e controlado por um humano. Um pouco de programação e engenharia mecânica
magia, e você tem-se um brinquedo de gato autônoma.
No entanto, no projeto gato-brinquedo vamos construir neste cCapítulo, não vamos deixar por isso mesmo. Nós apenas não pode.
Afinal, não seria
faz sentido ter o brinquedo sempre em movimento, com ou sem o seu gato está por perto para brincar com ele, não é? Então,
vamos adicionar
algo um especial sensor infravermelho. Dessa forma, ele vai ligar apenas quando seu gato está por perto, e ele vai desligar quando
o gato deixa a sala.
Você está pronto? Vamos começar por obter as peças que você precisa para criar o nosso brinquedo de gato.
A Lista de Compras de Peças
Um recurso interessante do brinquedo do gato, além de ser simples e caseiro, é que as peças são realmente muito barato.
Você vai precisar do seguinte:
• A Raspberry Pi.
• Dois padrão (não contínua) servos-I recomendar o Parallax 900-00005
(Http://www.parallax.com/product/900-00005), mas qualquer modelo vai funcionar.
• Um ponteiro laser barato, que você pode comprar em uma loja de animais para cerca de US $ 10 US. (Ver Figura 9-1.)

Capítulo 9 ■ O Toy Cat


Figura 9-1. Um ponteiro de laser comum usado com o brinquedo do gato
• Um sensor de movimento PIR (http://parallax.com/product/910-28027).
• Glue / epóxi.
• fios Diversos (vermelho, preto, e assim por diante).
• parafuso de cabeça plana.
• Fita isolante.
• picolé stick.

Bateria de 9V.
• Um recipiente em que para montar tudo, eu usei um pequeno pedaço de tubo de PVC.
O conceito por trás da Toy
A chave para fazer este trabalho brinquedo é movimento aleatório. Se programar o brinquedo para fazer uma série de círculos
concêntricos, um após
outro, e depois repetir o padrão, não vai demorar muito para o seu gato para reconhecer o padrão e se cansar. Contudo,
usando do Python aleatórios ou randint funções, você pode embaralhar os padrões e manter o seu gato (e, possivelmente, o seu
criança) entretidos.
Outro aspecto a ter em mente é que você vai ser a randomização o movimento em dois eixos-eixo-x e o
eixo dos y, mantendo-a dentro de certos limites de movimento (que é o local onde os parâmetros das funções randomizing
e os extremos de movimento dos servos entrar). Você estará usando dois servos, mas eles vão ser unidas de forma
para controlar o movimento de um ponteiro laser. Para controlar os servos, como vários outros projetos neste livro, nós usaremos
o
Pinos GPIO do Pi e biblioteca GPIO do Python. Outra coisa agradável sobre este projeto é que os servos acabam desenhando
assim
pouca energia que pode ser obtida com uma bateria de 9V simples. Você ainda precisa para poder deles separadamente do Pi
(Sempre uma boa idéia, independentemente do projeto), mas você não precisa de uma configuração de fantasia da bateria como
você faz com muitos outros
projetos.
Capítulo 9 ■ O Toy Cat
Criando e usando números aleatórios
Você pensaria criação e utilização de números aleatórios seria simples. Basta chamar uma função, obter um número inteiro
aleatório,
e prossiga. Embora isso possa ser como ele funciona na prática e é tudo o que a maioria de nós pensar, o processo real de
saída de randomização é fascinante-é realmente o assunto de intenso estudo por muitos cientistas da computação e
matemáticos. (Veja o quadro "Oh, a aleatoriedade".) Para obter um número aleatório em Python, você pode usar vários
built-in funções. O primeiro é, apropriadamente, a função random (). A função aleatório retorna um float
(a ponto flutuante, número decimal). Ele não usa nenhum parâmetro, retornando ao invés de um número aleatório entre 0,0 e
1.0. Isso é muitas vezes muito útil, mas para os nossos propósitos, vamos precisar números, de preferência um pouco maiores, em
um
formato inteiro, que pode ser feito com a função randint ().

OH, a aleatoriedade
Desde os tempos antigos, os humanos tiveram muitos métodos para gerar números "aleatórios", de lançar uma
moeda, para
rolar um dado, para baralhar um baralho de cartas. E para a maioria das aplicações, qualquer um destes seria bom
para gerar uma
número aleatório ou conjunto de números. Se você precisa decidir que chuta a bola em primeiro lugar, você pode
lançar uma moeda; escolher um cartão
fora de um baralho de 52 é aleatório o suficiente para torná-lo muito impressionante quando um mágico adivinha com
sucesso sua identidade.
No entanto, existem duas questões principais com o uso destes métodos para gerar números aleatórios para
qualquer verdadeira
esforço matemática ou estatística. Primeiro de tudo, eles são todos baseados em sistemas físicos, a tampa de uma
rodada
moeda no ar, o rolamento de um dado mais ou menos quadrado em um patch não-tão-nível de chão. Porque eles
são física
sistemas, eles nunca podem ser verdadeiramente aleatória. Dada suficiente iterações, um padrão irá, eventualmente,
começam a surgir baseada
em imperfeições no sistema. Uma moeda, por exemplo, tem um ligeiro desvio do peso de um lado, devido aos
padrões
gravado em ambas as faces. Se você lançá-lo bastante vezes, esse padrão irá mostrar-se nos resultados coletados.
Pode demorar
vários milhões ou vários bilhões de flips, mas vai emergir. Do mesmo modo, um molde nunca será perfeitamente
quadrada ou perfeitamente
ponderadas, e, eventualmente, mostram uma tendência para um lado, depois de uma quantidade suficiente de rolos.
O segundo problema com esses métodos de geração de números aleatórios é simplesmente que eles tomam muito
tempo.
Se você precisa de um bom lote de um milhão de números aleatórios, você vai ser lançando uma moeda para um
longo tempo para obter todas
esses números. É apenas impraticável para grandes lotes de dados.
Mas os computadores são excelentes em lidar com lotes imensos de números e dados, e eles podem gerá-los
incrivelmente rápido. O computador de mesa médio pode processar a uma velocidade teórica de cerca de 7
Gigaflops. (Isso é
7 bilhões de operações de ponto flutuante por segundo.) A essa velocidade, gerando um milhão de números
aleatórios levaria ...
bem, vamos ver ... transportar os dois ... dividir por amarelas ... um ... cerca de 7 milissegundos. Muito mais rápido
que o cartão de embaralhar.
No entanto, os computadores, mais uma vez, são sistemas físicos. Sim, você está gerando os números de dentro do
"Ciberespaço" do processador central do computador, mas que o processador é um chip de silício física, com física
transistores e fios. Não importa o programa que você usa para gerar esses números aleatórios, eles acabarão por
exibir um padrão que mostra que eles não são verdadeiramente aleatórios. Assim, você vê o interesse em números
aleatórios por
matemáticos e cientistas. Um gerador de números verdadeiramente aleatórios seria extremamente útil em muitas
áreas da
ciência, não menos do que é a criptografia. A maioria das cifras são baseadas em um código de hash aleatório; um
verdadeiramente aleatório
código seria infinitamente mais difícil de decifrar-que é uma das razões para o interesse intenso.
Geradores de números aleatórios atuais funcionam utilizando algoritmos que criam longas seqüências de números
pseudo-aleatórios,
frequentemente com base em combinações de multiplicações e as operações de módulo. Dependendo da qualidade
do algoritmo,
os números assim gerado pode ou não ser criptograficamente som, apesar de serem na maioria das vezes aleatório
o suficiente para aplicações como jogos de vídeo. Em outras palavras, o algoritmo utilizado para gerar números
aleatórios
provavelmente não vai parar um esforço concertado para quebrar o código de um supercomputador, mas é bom o
suficiente para gerar
oponentes quando você joga Call of Duty: The Day We All morreu nas mãos da Sexta-Grader para baixo do bloco.

Capítulo 9 ■ O Toy Cat


Este processo de geração é por isso que, quando você começa um programa que vai estar usando números
aleatórios, você tem que
"Seed" do gerador de números aleatórios com outro número, como a data de hoje ou a hora do sistema no seu
computador. A semente aleatória é simplesmente um número usado para inicializar o algoritmo de vetor de número
aleatório na
programa. Assim, desde que a semente original é ignorada, inicializações subsequentes devem fornecer
suficientemente aleatório
números. Sim, eventualmente, um padrão vai emergir-é inevitável, mas um gerador aleatoriamente-semeado deve
ser
suficientemente aleatória para a maioria das necessidades, em particular um brinquedo gato aleatório-motion. O gato
de Schrödinger pode não ser enganado,
mas seu felino deve ser. (Desculpe-só um pouco humor da física lá.)
De acordo com os documentos Python, randint (a, b) retorna um número aleatório N, de tal modo que n está entre a e b,
inclusivo. Em outras palavras, o seguinte código
>>> Import aleatória
>>> X = random.randint (1, 10)
>>> Print x
deve retornar 1, 2, 3, 4, 5, 6, 7, 8, 9 ou 10. Nós vamos usá-lo para gerar posições para os servos que usamos.
■ ■ Nota Os docs Python podem ser encontradas em http://docs.python.org. Eu recomendo que, como você
aprender a
língua, você tem o hábito de consultar os docs. Você também pode digitar help (função) no Python interativo
prompt para obter o mesmo material de leitura.

Utilizando a biblioteca GPIO


Agora que você tem uma idéia de como vamos gerar os nossos números aleatórios, você precisa saber como controlar a
servos que serão anexados ao Pi. Felizmente, há uma biblioteca Python que foi projetado especificamente para esta finalidade que
vem pré-instalado no Pi. Esta biblioteca permite-nos aceder a saída General Purpose Input do Pi (GPIO) pins e
é chamado, simplesmente, RPi.GPIO.
Para trabalhar com a biblioteca, você pode ter que instalar manualmente duas outras bibliotecas. Primeiro verifique se o seu Pi
está actualizado
digitando
sudo apt-get update
e, em seguida, instalar os pacotes, digitando
sudo apt-get install python-dev
e
sudo apt-get install python.rpi-GPIO
Nós podemos começar a escrever o nosso código final para este projeto. Lembre-se, ele está disponível como cat-toy.py de
Apress.com.
Agora, para acessar o Pi, você chamar o seguinte nas primeiras linhas de seu programa:
importação RPi.GPIO como GPIO
Capítulo 9 ■ O Toy Cat
Em seguida, configure-lo digitando
GPIO.setmode (GPIO.BOARD)
que permite identificar os pinos de como eles são rotulados em um diagrama de pinagem padrão, mostrada na Figura 9-2.
Figura 9-2. Pinout de pinos GPIO
■ Nota Tenha em mente que com GPIO.setmode (GPIO.BOARD), quando você se referir ao pino 11, na verdade você
está se referindo ao
pin física # 11 (que se traduz em GPIO17 no diagrama na Figura 9-2), não GPIO11, que traduz para o
pin física # 23).

Capítulo 9 ■ O Toy Cat


Depois de definir o modo, você pode então definir cada pino para ser uma entrada ou uma saída. Os usuários do Arduino vai
provavelmente reconhecem o conceito aqui, mas isso é o que você digita para o Pi:
GPIO.setup (11, GPIO.OUT)
GPIO.setup (13, GPIO.IN)
e assim por diante. Depois de definir um pino como uma saída, você pode então enviar tensão para ele (ligá-lo), inserindo
GPIO.output (11, 1)
ou
GPIO.output (11, True)
Posteriormente, você pode desligá-lo, inserindo
GPIO.output (11, 0)
ou
GPIO.output (11, False)
Usaremos dois pinos para ser servo controles: um pino para ligar o ponteiro do laser, e outro para ler a entrada do
Sensor IR.

Controlando o Servo
Servos são uma parte importante de muitas, muitas aplicações diferentes, de veículos controlados por rádio para high-end
robótica. Um servo é, na sua essência, nada mais do que um motor DC. No entanto, com a ajuda de software você pode ter
extremamente bom controle sobre a rotação do motor. Por exemplo, se você precisar dele para rodar 27,5 graus e, em seguida,
parar
(e assumindo que o servo é capaz), você pode enviá-lo de que o comando de programação.
Então, como você faz isso usando os pinos GPIO sobre o Pi? Infelizmente, você não pode simplesmente ligar o fio de sinal do
servo
(o branco, geralmente) em um pino GPIO para fora, dar-lhe uma tensão positiva e negativa, e esperar que ele funcione. Pode, mas
em seguida, novamente ele não pode.
A resposta está em como controlar servos. Como peças analógicas de hardware, eles são anteriores a maior parte digital de hoje
hardware, incluindo a Pi. Eles funcionam utilizando modulação de largura de pulso (PWM). Para controlá-los, você deve
ser capaz de enviar sinais PWM via qualquer mecanismo que você está usando, se é um pino de Arduino, cabo serial, ou
Pino GPIO do Raspberry Pi. Se você deseja definir a posição de um servo, você precisa enviá-lo pulsos regulares de corrente-50
vezes por segundo é uma média de pulso de velocidade em vez de um pulso longo. Que 50 vezes por segundo traduz-se você
estiver
pensando-a um impulso a cada 20 milissegundos (ms).
O comprimento do pulso, que, além disso, é o que determina a posição do servo. Um no pulso de 1,5 ms, para
exemplo, enviou a cada 20 milissegundos, irá enviar o servo para a posição central. Pulsos mais curtos vai transformá-lo um
direção, enquanto pulsos mais longos irá enviá-lo a outro. Assim, precisamente por o comprimento de temporização dos impulsos
para o enviar
servo, você pode posicionar precisamente a cabeça servo.
O gráfico da Figura 9-3 ilustra isso melhor.

Capítulo 9 ■ O Toy Cat


Figura 9-3. Ciclos dever de um servo
Se você deseja enviar o servo para o neutro, a posição "zero", você enviá-lo de 1,5 ms no pulso a cada 20 ms, o que pode
ser pensado como um ciclo de trabalho de 7,5%. Da mesma forma, se você quiser transformá-lo anti-horário com um 0,5-ms no
pulso, tem um
ciclo de serviço de 2,5%, e uma mais 2,5-MS no pulso traduz para um ciclo de trabalho de 12,5%. Em outras palavras, o servo é
um dado
De impulso "alto" para 2,5%, 7,5%, ou 12,5% do tempo.
Estas instruções são aplicáveis a normalização não contínuo-servos. A diferença é que enquanto padrão
servos usar o comprimento do impulso para determinar a sua posição final (em graus do centro), servos uso contínuo
a duração do pulso para determinar a velocidade a que deve virar. Um servo standard irá se mover para seu destino
posição e, em seguida, parar até que um novo comando é enviado; um servo contínua é quase sempre em movimento, com a
velocidade de
o movimento determinado pelos comprimentos de impulso. E enquanto você pode conseguir usar qualquer tipo de servo para o
gato
brinquedo, faz mais sentido usar servos padrão e, portanto, têm tanto a capacidade de posicionamento exato ea capacidade
para parar completamente, permitindo que o gato-temporariamente, pelo menos- "pegar" o pequeno ponto vermelho.
O problema com este método de movimento servos, no entanto, é que pode ser difícil utilizar o Pi e Python
enviar pulsos milissegundo de comprimento para os pinos GPIO. Como todos os outros processos em execução no Pi, Python é
constantemente
sendo interrompido por processos em nível de sistema de funcionamento, fazendo sincronismo preciso de pulsos por um
programa Python
impraticável, para dizer o mínimo. No entanto, mais uma vez, a biblioteca GPIO tem o que precisamos: você pode usar a
biblioteca para definir um
GPIO pin como um pino PWM, dando-lhe o ciclo necessário dever de enviar os pulsos de comprimento correto para o pino.
Assim, embora seja teoricamente possível roteiro algo como isto:
while True:
GPIO.output (11, 1)
time.sleep (0,0015)
GPIO.output (11, 0)
time.sleep (0,0025)
os resultados provavelmente seria algo completamente inesperado, se ele trabalhou em tudo. Em vez disso, o que nós podemos
fazer é definir
pino do sinal de servo (pino 11 no nosso exemplo, o processo aqui) ser um pino de saída de PWM, inserindo
p = GPIO.PWM (11, 50)
A 50, neste caso, define os pulsos de 50 Hz (um impulso a cada 20 milissegundos), que é o que requer que o servo
trabalho. Podemos, então, definir ciclo de trabalho do pino para 7,5%, digitando
p.start (7,5)

Capítulo 9 ■ O Toy Cat


Se colocarmos p.start (7.5) dentro de um loop while, o resultado é que o servo se moverá para a posição central e
então permanecer lá. Alterar o ciclo de trabalho com p.ChangeDutyCycle () vai permitir-nos para mover o servo em diferentes
direções, o que é o que nós estamos indo para com o brinquedo do gato. Assim, por exemplo, para ver o seu servo movimento
frente e para trás, tente
o seguinte script:
importação RPi.GPIO como GPIO
tempo de importação
GPIO.setmode (GPIO.BOARD)
GPIO.setup (11, GPIO.OUT)
p = GPIO.PWM (11, 50)
p.start (7,5)
while True:
p.ChangeDutyCycle (7,5)
time.sleep (1)
p.ChangeDutyCycle (12,5)
time.sleep (1)
p.ChangeDutyCycle (2,5)
time.sleep (1)
A execução deste script deve fazer a sua varredura servo e para trás, fazendo uma pausa para um segundo entre cada
mudança de direção.
Tudo o que resta para o nosso script de brinquedo de gato é implementar alguns números aleatórios. Esses números irão
determinar qual
move-se servo, em que direção, e por quanto tempo. O resultado deve ser um caminho bastante aleatória em duas dimensões.

Construindo o Mecanismo Servo


Nosso brinquedo de gato vai estar varrendo um ponteiro laser em duas direções, o que significa que precisamos de um servo
capaz de o
mesma coisa. Enquanto servos não são geralmente capazes de movimento 2-dimensional, podemos facilmente construir um pan e
tilt
servomecanismo usando dois servos normais ligados uns aos outros.
■ Nota Este procedimento irá ligar permanentemente os seus dois servos, tornando-os inseparáveis, para se
certificar que você tem
outros a usar para outros projetos. No entanto, lembre-se que uma configuração de pan e tilt como você está
fazendo aqui é uma coisa útil
para ter a projectos em que você precisa mover um item em duas dimensões, e você provavelmente vai usá-lo
novamente. Então, não é como se
você está destruindo os dois servos completamente.
Tudo que você precisa fazer é montar o corpo de um servo para as pontas do outro. Para fazer uma conexão segura, você
talvez seja necessário remover o parafuso que prende os chifres servo do servo base (vamos chamá-lo o servo do eixo X para
manter a tarefa
simples) e arquivar para baixo o plástico um pouco. Você está tentando alisar o topo do servo, tanto quanto possível para acasalar-
lo
firmemente com o corpo do outro (eixo dos Y) de servo.
Quando é tão plana como ele vai conseguir, use um epóxi forte ou adesivo para colar o corpo servo-eixo Y para as pontas do
Servo-eixo-X. Eu usei Gorilla Glue e obteve o resultado na Figura 9-4.
Capítulo 9 ■ O Toy Cat
Figura 9-4. Colados X e Y servos
O ponteiro laser podem agora (depois de algumas modificações não tão pequenos) ser montado no topo (eixo Y) servo.
Construindo o Mecanismo Laser
Nós estamos indo para usar um ponteiro laser standard, mas nós estamos indo para modificá-lo em alguns aspectos importantes. O
mais importante
maneira é que em vez de usar baterias, vamos ligá-lo usando pinos GPIO do Pi. Isto é importante porque nos permite
para ligar o laser e fora de forma programática, em vez de agitação com o interruptor de botão de pressão.
Para modificar o ponteiro laser, você vai precisar de alguma fita isolante e um parafuso de cabeça chata cerca de duas polegadas
de comprimento e
com uma cabeça apenas um pouco menor do que o diâmetro interior do ponteiro laser. Enrole o parafuso com a fita isolante de
modo
que ele se encaixa confortavelmente dentro do ponteiro. Se necessário, quando estiver pronto, corte o final da fita (como mostrado
na Figura 9-5)
de modo que o ponto do parafuso é exposto.
Figura 9-5. Mecanismo de parafuso para ponteiro laser
Capítulo 9 ■ O Toy Cat
Retirar a base do ponteiro laser, e retire as pilhas. Aperte o parafuso, de cabeça, no corpo do ponteiro
de modo que a cabeça do parafuso está empurrando para baixo a mola interna que é normalmente pressionada pelas baterias.
Você pode ter que
jogar com a quantidade de fita que você usa para embrulhar o parafuso; você quer que ele seja um ajuste apertado o suficiente
para pressionar para baixo a mola
e permanecer no local sem o perigo de se mover.
Precisamos também de fita botão de energia do laser pointer para baixo de modo que é sempre ligado. Como eu disse, nós vamos
cuidar de
alimentar o ponteiro do Pi. Enrole um pedaço de fita adesiva ao redor do ponteiro para manter pressionado o botão.
Neste ponto, você deve ter algo que se assemelha a imagem na figura 9-6.
Figura 9-6. Mecanismo ponteiro laser Concluído
Se você quiser testar o seu trabalho, use algumas garras jacaré para conectar o ponto do parafuso ao pino # 6 (o pino terra)
sobre o Pi, e conecte o corpo do ponteiro ao pino # 1 (3.5V). O laser deve acender, mostrando que você está ligando-
diretamente do pino de alimentação do Pi. Se nada acontecer, verifique se a cabeça do parafuso está pressionando a mola, o poder
botão está firmemente gravada para baixo, e todas as suas conexões são sólidos. Uma vez que as ligações são sólidos, você está
pronto para
montar o laser para o seu servo maquineta bidimensional.
Ligar o laser para o Servo
Ligar o laser para o servo é provavelmente a parte mais fácil do projeto. Se você é como eu, você não quer
anexar permanentemente a laser para a configuração servo pan e tilt que você tem, porque essa configuração pode vir a calhar
com
outros projetos também. Por isso, precisamos encontrar uma maneira de temporariamente anexar o laser para os chifres servo.
Eu usei um palito de picolé para puxar esta off. Nós podemos colar a laser para o palito de picolé, e aperte o stick para o
chifres servo. Isso pode ser feito tanto com os parafusos que vieram com o servo (você ainda tê-los, não é?) Ou a
parafusos menores que você pode encontrar em sua oficina. Confie em mim, esses são realmente minúsculos buracos no chifre
servo.
Usando uma cola forte (mais uma vez, eu gosto Gorilla Glue), apor o conjunto do laser para o palito de picolé. Quando a área é
seca,
usar os pequenos parafusos para fixar o palito de picolé para os chifres servo. Quando estiver pronto, você deve ter um dispositivo
que
parece com a Figura 9-7.
Capítulo 9 ■ O Toy Cat
Figura 9-7. Laser montado servos
Uma palavra de cautela aqui: levar algum tempo e posicione o ponteiro laser e seu servo associado para que o laser
pode girar livremente, não importa onde no ciclo os dois servos são. Obviamente, a maneira mais fácil de fazer isso é para
remover o
parafusos que prendem os chifres servo aos servos, e reposicionar os chifres com base em arcos de viagem dos servos. Em
seguida, execute o
dois servos através de todas as posições possíveis e certifique-se de que o seu mecanismo não se liga em qualquer ponto do seu
movimento.
Desde servos standard viajar apenas através de um arco de cerca de 180 graus, você deve ser capaz de encontrar uma posição
adequada
para todas as partes.
A última parte integrante do presente projeto é ligar o sensor de movimento.

Ligar o sensor de movimento


Não só o sensor de movimento (mostrado na Figura 9-8) salvar suas baterias, mas também contribui fortemente para o frio
fator: seu brinquedo é ativado apenas quando o seu gato (ou um cão, ou um colega de quarto, ou um Sasquatch) chega perto dela.

Capítulo 9 ■ O Toy Cat


Figura 9-8. Sensor de Parallax IR
Ligação do sensor IR é simples: os pinos positivos e negativos estão ligados ao poder, e o terceiro pino
(o pino mais à esquerda na Figura 9-8) está ligado a um dos pinos GPIO do Pi configurado como uma entrada. Quando o sensor
detectar movimento, ele gera um sinal de alta no pino de saída, que, em seguida, viaja para o pino de entrada do Pi. Com o GPIO
pin configurado como uma entrada, podemos ler que o sinal e executar o script Python controlando o brinquedo apenas quando
esse
sinal está presente.
Antes de continuarmos, eu preciso discutir o conceito importante de um pullup ou resistor suspenso. Sempre que você tem
uma entrada em eletrônica, se essa entrada não está lendo nada diretamente, ela é referida como uma entrada flutuante. Que
significa
o valor lido do que a entrada poderia ser absolutamente nada. Precisamos definir estado "vazio" que de entrada de modo que nós
vamos
sabe quando essa entrada muda.
Para definir o estado de "vazio" de uma entrada, normalmente conectar um resistor (10K ou 100K são valores comuns) entre o
entrada e quer um pino positivo (criando assim um pullup resistor) ou um terreno (criando assim um suspenso resistor). Qual
aquele que você usa não é importante, é apenas importante que a entrada é puxado para cima ou para baixo. Assim, se nada está
sendo lido em
o pino, e está ligado a uma terra através de uma resistência suspenso, ele irá ler "0." Quando já não lê "0", nós saberemos
que ele está recebendo de entrada.
No caso do nosso sensor IR, precisamos definir o valor lido no pino quando nenhum movimento for detectado como "LOW", de
modo
vamos usar um resistor suspenso. Felizmente, para manter este processo simples, a biblioteca GPIO nos permite fazer isso no
código, quando
nós definimos um pino como uma entrada como esta:
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_UP)
Se conectar o pino OUT do nosso sensor IR ao pino 11 sobre o Pi e inicializar que o pino com a linha de código anterior,
leia tudo sobre o pino 11 será "LOW" até que seja detectado movimento. Nesse ponto, o pino vai ler "HIGH" e nós
pode chamar a função que liga a laser e se move ao redor.
Para testar o sensor e nossa força de codificação, vamos começar por definir os pinos GPIO em conformidade. Podemos usar um
configuração simples para testar o nosso código; um LED em uma placa de ensaio que se acende quando o sensor é acionado. Em
um script Python,
entrar e salvar o seguinte código:
importação RPi.GPIO como GPIO
tempo de importação
GPIO.setwarnings (False) #eliminates lancinante da biblioteca
GPIO.setmode (GPIO.BOARD)
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.setup (13, GPIO.OUT)

Capítulo 9 ■ O Toy Cat


while True:
Se GPIO.input (11):
GPIO.output (13, 1)
outro:
GPIO.output (13, 0)
Isso é tudo para o código de teste! Para testar o código ea configuração do sensor, primeiro conecte o pino (+) sobre o sensor ao
pino # 2 na
o Pi. Conecte o pino OUT ao pino # 11 sobre o Pi. Conecte o - pin a uma linha de base comum sobre a sua placa de ensaio ().
Finalmente, conectar o pino nº 13 do Pi para a perna positiva de sua LED, e se conectar a perna negativo do LED (através de um
resistor) para a linha de base comum. Você deve acabar com algo parecido com a configuração que você vê na figura 9-9.
Figura 9-9. Sensor IR e configuração de teste LED
■ Nota A imagem na Figura 9-9 foi criado com Fritzing (http://www.fritzing.org), uma grande open-source
breadboarding ferramenta / design. É multi-plataforma, muito fácil de usar e aprender, e altamente recomendada.
Quando você executar o script (lembrando-se de executar o código como o superusuário ou sudo, uma vez que você está
acessando
os pinos GPIO), o LED deve acender quando você mover sua mão ao redor do sensor, e depois ir para fora outra vez depois de
algumas
segundos de não movimento. Se isso não funcionar, verifique as conexões e suas peças-a-fora queimado LED pode causar
todos os tipos de dores de cabeça de solução de problemas, acreditem!
Se tudo funcionar como planejado, agora podemos ligar o brinquedo e completar todas as conexões.

Capítulo 9 ■ O Toy Cat


Conectando todos os bits
Depois de testar com sucesso o sensor de infravermelho, o código necessário para operá-lo, e o código utilizado para trabalhar a
servos,
e quando tudo está ligado a tudo o resto, é hora de ligar tudo e fazer todas as conexões.
Este é o lugar aonde uma pequena placa de ensaio vem a calhar, porque você pode conectar todos os seus fundamentos em
conjunto (um absoluto
necessidade) e poder de execução para tudo, conforme necessário. Eu usei uma bateria de 9V para os dois servos, mas sinta-se
livre para tentar diferente
baterias como você preferir. Não é necessário o uso de uma bateria recarregável RC, neste caso, como fazemos em alguns outros
projetos,
porque o peso não é realmente um problema e os servos não executar a bateria para baixo muito rápido, como eles não estão
constantemente
rodando graças ao sensor. No entanto, você não precisa para alimentar os servos com uma fonte separada da que
você está usando para alimentar o Pi; caso contrário, você vai ter congela e falhas constantes. Com uma placa de ensaio que tem
dois energia
canais, você pode executar o + 9V para baixo um canal positivo, conectar o pino # 2 sobre o Pi para o outro canal positivo, e
em seguida, ligar os dois negativos juntos. Então você pode se conectar a potência do laser e do poder sensor IR ao poder do Pi
canal e conectar os dois servos para o canal de energia 9V, e todos os seus fundamentos serão amarrados.
Ver Figura 9-10, que mostra as várias partes ligadas em conjunto, utilizando uma placa de ensaio.
Figura 9-10. Interconexões componente final
Capítulo 9 ■ O Toy Cat
Figura 9-10 não é totalmente preciso porque o ponteiro de laser é suposto ser anexado ao servos, mas você
começa a idéia geral. O ponteiro é alimentado com o pino # 11, os servos são alimentados com alfinetes # 13 e # 15, # 19 e pin
é a entrada do sensor. Então, tudo é dado a respectiva tensão para fazê-lo funcionar.
Existem algumas tarefas mecânicas de engenharia envolvidas na construção deste brinquedo, não menos do que é o melhor
maneira de anexar permanentemente os fios de alimentação e de terra para o ponteiro laser. Enquanto pinças são muito bem para
os ensaios, de
Assim que os servos começar empurrando o ponteiro em círculos, eles estão indo para ser desfeito.
A melhor solução para isto é a soldar os fios para as peças de ponteiro. Se você puder, use uma lixa para tornar áspero o ponto
do parafuso e a carcaça ponteiro. Se você tiver espaço, faça um pequeno furo no revestimento ponteiro para segurar o fio positivo.
Em seguida, anexar os seus fios e solda tudo. Seus resultados podem variar, dependendo de suas habilidades de solda e da
materiais com os quais você está trabalhando. Você ainda pode usar cola, desde que você não conseguir cola entre os contatos de
metal
dos fios e peças de ponteiro. É importante que todos os fios tem uma conexão boa e sólida.
O último passo é montar o dispositivo inteiro em algum tipo de recipiente para manter tudo no lugar e para proteger as entranhas
de
a máquina de investigação felino. Pode manter todas as partes breadboarded, enquanto este está protegido a partir da extremidade
usuário (seu gato.) I tendem a usar tubos de PVC em casos como estes, porque um servo padrão se encaixa quase perfeitamente
em um de 2 polegadas
Tubo de PVC ID. Neste caso, você pode montar o servo mais baixo para a borda do tubo, ea maioria dos fios e coragem pode
ser arrumadas de forma segura dentro dela, com um furo na lateral para o sensor infravermelho. O Pi não vai caber, mas pode ser
com segurança
arrumadas em uma caixa separada, ligada ao conjunto de tubo através de fios jungir longos.
Com sorte, você acabar com um brinquedo do gato que é algo como Figura 9-11.
Figura 9-11. Concluído brinquedo de gato

Capítulo 9 ■ O Toy Cat


Não é bonito, mas o seu gato não vai se importar. Pode ser gussied, é claro, com uma tampa sobre a extremidade do tubo e uma
camada
de tinta. Provavelmente, o detalhe mais importante para se lembrar (e não é mostrado aqui) é esconder a coragem e fios de
olhos curiosos (e patas). O tubo de PVC que usei aqui é muito estreita, mas um tubo com uma secção transversal maior poderia
facilmente
ser equipado com o Pi e todas as outras vísceras dentro dele, fazendo uma unidade auto-contida. Então você pode adicionar um
interruptor de alimentação
para o exterior, e está pronto para ir.
Que deve ser isso! Executar o script cat_toy.py agora deve manter seu amigo felino (e muito possivelmente o seu
os humanos) entretido por horas. Vale a pena notar que agora você tem o conhecimento ea capacidade de apontar e disparar
um laser com o Raspberry Pi. Sim, é uma míseros pouco ponteiro laser, mas o conceito pode ser facilmente aplicada a qualquer
laser,
independentemente do tamanho ou poder. Qualquer laser.
Divirta-se!
O código final
Este código, disponível no site da Apress.com como cat-toy.py, configura os pinos de saída GPIO, sementes aos números
aleatórios
geradores e, em seguida gira os servos e acende o laser em movimentos aleatórios.
importação RPi.GPIO como GPIO
tempo de importação
importação aleatória
random.seed ()
pins #set
GPIO.setmode (GPIO.BOARD)
GPIO.setwarnings (False)
GPIO.setup (11, GPIO.OUT) poder #laser
GPIO.setup (13, GPIO.OUT) # X servo-
GPIO.setup (15, GPIO.OUT) # Y-servo
GPIO.setup (19, GPIO.IN, pull_up_down = GPIO.PUD_UP) #in de IR
#setup servo PWM
p = GPIO.PWM (13, 50)
q = GPIO.PWM (15, 50)
#set ambos os servos até o centro para começar
p.start (7,5)
q.start (7,5)
def moveServos ():
"Acende a laser e move X e Y-servos aleatoriamente"
lightLaser ()
p.ChangeDutyCycle (random.randint (8, 12))
time.sleep (random.random ())
q.ChangeDutyCycle (random.randint (8, 12))
time.sleep (random.random ())
p.ChangeDutyCycle (random.randint (3, 5))
time.sleep (random.random ())
q.ChangeDutyCycle (random.randint (3, 5))
time.sleep (random.random ())
dimLaser ()

Capítulo 9 ■ O Toy Cat


def lightLaser ():
GPIO.output (11, 1)
def dimLaser ():
GPIO.output (11, 0)
laço #main
while True:
#check para a entrada do sensor
Se GPIO.input (19):
moveServos ()
time.sleep (0,5) #WAIT meia sec antes sensor de polling
outro:
dimLaser ()
time.sleep (0,5)
Resumo
Neste cCapítulo, você construiu com sucesso um mecanismo servo de dois eixos, cortou um ponteiro laser para ser demitido pelo
Raspberry Pi, e usou suas habilidades de programação para apontar aleatoriamente e disparar o laser para entreter seu gato.
No próximo cCapítulo, vamos obter o seu Pi para fora da casa e enviá-lo para o céu em um avião controlado por rádio.

Capítulo 10
O avião controlado por rádio
Muitos de nós têm muito tempo sonhava em vôo de voar através do ar, livre como um pássaro. Ou, como o piloto John Magee Jr.
colocou,
deslizando as "ligações surly da Terra. . . ", Dançando através dos céus" nas asas lisas e prateadas, "e no topo" da
alturas varridas pelo vento com graça fácil ".
Infelizmente, deslizando as ligações surly da terra, muitas vezes leva tempo e dinheiro que não temos, e isso pode
explicar, em parte, o advento do (RC) do avião controlado por rádio. Embora possamos não ser capaz de suportar terra ou vôo
escola, uma escala 1:12 Piper Club pode ir um longo caminho para tornar-nos sentir menos fundamentada, e nós temos a
oportunidade de pilotar um
avião real sem ter de pisar fora de terra firme.
O problema, porém, é que, enquanto nós podemos controlar o avião do chão, não é completamente como realmente estar
há. Embora existam complicados, caros maneiras de prender uma pequena câmera de vídeo no seu plano de RC, que seria bom
se você poderia fazer algo semelhante com o Pi. E isso seria muito legal se você pudesse manter o controle de seu vôo, e depois
carregar as coordenadas para o Google Earth para ver o que o seu vôo parecia.
Bem, neste projeto que você pode fazer exatamente isso. O plano para este projeto é colocar o Pi e um receptor GPS a bordo de
um
Plano de RC e, em seguida, voar. A câmera do Pi vai tirar fotos durante o vôo, e o GPS irá registrar os dados de localização.
Depois,
quando você voltar para casa, você vai usar um script Python para analisar os dados de localização em um arquivo KML que você
pode fazer o upload para
Google terra
■ Nota Este cCapítulo contém alguns conceitos avançados de programação, talvez mais avançados do que
qualquer coisa que você tem
deparamos até agora, como fios e até mesmo um pouco de programação orientada a objetos (OOP). Mas eles não
são terrivelmente
complicado, e eu vou explicar os conceitos que possam surgir.
A Lista de Compras de Peças
Embora este projeto não requer muitas partes, ele pode realmente ser o projeto mais caro para construir neste
livro, porque requer um, (RC) do avião rádio-controlado de médio porte. Aqui estão algumas peças adicionais que você vai
precisar:
• Raspberry Pi (com câmera)
• Receptor GPS (https://www.adafruit.com/products/746)
• Antena para o receptor (opcional) (https://www.adafruit.com/products/851)
• tamanho médio RC avião
• RC bateria e regulador de 5V para alimentar o Pi
Capítulo 10 ■ O Avião Rádio-Controlado
Se acontecer de você já ser um entusiasta RC, você provavelmente vai ter um plano que você pode usar, mas se você é novo para
o esporte, você vai precisar comprar um bom plano de partida. Como amador, posso recomendar um bom novato de
plane-o Switch, por FlyZone (mostrado na Figura 10-1).
Figura 10-1. O Switch (Imagem © FlyZone Planes em http://www.flyzoneplanes.com)
Este plano é resistente o suficiente para suportar algumas falhas quando você aprender a voar, firme o suficiente para ser pilotado
por um
novato absoluto, é o mais importante-ser poderoso o suficiente para suportar o peso extra de um Pi, receptor GPS, ea
bateria para alimentar os dois. Seu nome vem do fato de que, como você se tornar mais aptos a voar, você pode remover
as asas da configuração estável "top" e mudá-los para uma configuração "mid" mais baixo para mais acrobático
manobras. Como você verá, a configuração "top" é perfeito não só porque é fácil para iniciantes, mas porque o Pi
e GPS pode sentar-se confortavelmente no topo da asa.
Pronto? Vamos começar criando um diretório para o nosso programa avião:
plano mkdir
e depois navegar nela, digitando cd.
Agora vamos começar a Pi para se comunicar com o nosso dispositivo GPS.
Ligar o receptor GPS para o Pi
Para obter o seu Pi falar com o receptor GPS, primeiro você precisa conectar os dois. Para fazer isso, nós vamos usar a biblioteca
Python
chamado gpsd, e UART do Pi (Universal Asynchronous Receiver / Transmitter) de interface (pinos 7 e 8). O Python
gpsd módulo é parte de uma biblioteca maior de código concebido para permitir que dispositivos tais como a Pi para monitorar
GPS ligado
e receptores AIS, com portas para C, C ++, Java e Python. Ele permite que você "ler" o National Marine Electronics
Association (NMEA) -formatted dados transmitidos pela maioria dos receptores GPS.
Capítulo 10 ■ O Avião Rádio-Controlado
A interface UART é antiga. É basicamente uma conexão serial (RS-232), mas para os nossos propósitos é tudo que precisamos.
Ele consiste em um positivo (+) e negativo (-) de conexão para energia e transmitir e receber pinos. Comece digitando o
seguinte linha para instalar o software que você precisa para ler o GPS, gpsd e seus programas associados:
sudo apt-get install DSGP-clientes DSGP python-gps
Em seguida, precisamos configurar a interface UART do Pi. Por padrão, ele está configurado para se conectar a uma janela de
terminal, mas nós
precisa de comunicar com o Tx e Rx (transmissão e recepção) dos pinos. Para fazer isso, primeiro fazer uma cópia de
/boot/cmdline.txt
digitando
sudo cp /boot/cmdline.txt /boot/cmdlinecopy.txt
e depois editá-lo digitando sudo nano /boot/cmdline.txt. Excluir a seguinte parte
console = ttyAMA0,115200 kgdboc = ttyAMA0,115200
para que o arquivo lê
dwc_otg.lpm_enable = 0 console = tty1 raiz = / dev / mmcblk0p2 rootfstype = ext4 elevador = prazo rootwait
Salve o arquivo, e em seguida, editar o arquivo inittab digitando
sudo nano / etc / inittab
Comente a seguinte linha (a última linha), que conta a Pi para iniciar uma ligação terminal, adicionando um
hashtag para o início da linha:
# T0: 23: de respawn: / sbin / getty -L ttyAMA0 115200 vt100
Agora reinicie digitando sudo shutdown -r now.
Quando você está de volta instalado e funcionando, conecte o receptor de GPS para o Pi assim:
1.
Conecte VIN do receptor para 5V do Pi (pino # 2).
2.
Conecte o GND para Pi pin # 6.
3.
Conecte o Tx a Rx Pi (pino # 10).
4.
Conecte o Rx de Pi Tx (pino # 8).
Quando o LED do receptor começa a piscar, você sabe que tem poder. Agora você pode testá-lo iniciando o gpsd
programa digitando
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
Em seguida, iniciar o cliente GPS genérico, digitando
CGPS -s
O cliente CGPS é um visualizador genérico; ele simplesmente pega os dados do programa gpsd está recebendo e exibe-lo para
o usuário.
Pode demorar um momento para dados para começar a transmitir, mas quando isso acontece, você deve ver uma tela como a da
Figura 10-2.
Capítulo 10 ■ O Avião Rádio-Controlado
Figura 10-2. O fluxo CGPS
Se você não vê nada, mas zeros, isso significa que o GPS não consegue encontrar uma solução por satélite. Você pode ter que
esperar alguns minutos ou
até mesmo dar o GPS uma visão clara do céu. Minha experiência é que esta placa GPS particular, mesmo sem o opcional
antena, é muito sensível. Quando eu adicionei a antena, eu não tinha problema obter um sinal GPS, mesmo em minha casa.
Depois de saber que a unidade GPS está funcionando e se comunicando com o Pi, é preciso colocar essa informação em
um formato que pode usar em um arquivo de log. Embora o cliente genérico, CGPS, que usamos aqui é útil para visualizar
coordenadas,
infelizmente é muito difícil obter informações úteis a partir dele. Por esta razão, vamos usar o módulo GPS para Python
interagir com o receptor.
■ Observação O gps módulo permite que você se comunique com muitos receptores GPS diferente, não apenas o
que estamos usando em
este projeto. Existem alguns receptores que geram fluxos de dados proprietárias, mas a maioria deles de saída da
mesma
Dados NMEA-formatado como o chip que estamos usando aqui.

Configurando um arquivo de log


Quando chegarmos a corrente do GPS, nós precisamos de ter um lugar para armazená-lo para uso posterior, como ele não vai
fazer-nos muito bom se
nós estamos apenas imprimi-lo a um (nonconnected) tela durante o vôo. O que podemos fazer é criar um arquivo de log, usando
Python de
registrando módulo e, em seguida, quando o Pi está de volta no chão, podemos analisar o arquivo e colocá-lo em um formato que
pode usar
no Google Earth.
Configurando o arquivo de log é muito simples. Comece digitando
logging importação
logging.basicConfig (filename = 'locations.log', nível = logging.DEBUG, format = '% (message) s')
Estas duas linhas de importar o módulo, declare nome do arquivo de log e do que é registrado, e dar o formato de cada
linha. Vamos guardar cada chamada GPS em três textos: a longitude, latitude e altitude, as três coordenadas utilizado pelo
Google terra. (Eles estão realmente salvos como carros alegóricos, e não cordas, o que significa que nós vamos ter que convertê-
los em cadeias
. quando escrevê-las no arquivo de log) Para escrever uma linha no arquivo de log, o formato é simplesmente esta:
logging.info ("logado mensagem ou string ou que-ter-você")

Capítulo 10 ■ O Avião Rádio-Controlado


Não é necessário usar o caractere de nova linha (\ n), porque cada vez que você chamar a função logging.info (), ele
começa em uma nova linha.
No caso você esteja se perguntando, sim, nós podemos simplesmente escrever os dados do GPS em um arquivo regular, mas o
registro é um importante,
conceito útil que muitos programadores não entendem completamente ou ignorar completamente. No caso do Python
registrando módulo, você pode configurar entradas de registro a ser introduzidos, dependendo da gravidade do evento que está
sendo rastreado. tem
cinco severidades possíveis: debug, info, aviso, erro e crítico.

OS CINCO gravidades (níveis)


Enquanto eu estou usando o termo 'gravidades, "para descrever entradas de log talvez" níveis "pode ser um termo
melhor. Quando um
executa programas (não importa o idioma é escrito em), que normalmente gera eventos que podem ser registrados
por
o módulo de registro. Eventos de depuração são detalhados e são normalmente usados apenas para diagnosticar
problemas. Eventos Info
são confirmações de que as coisas estão funcionando corretamente. Eventos de aviso não apenas isso: eles alertam
que enquanto as coisas
ainda estão trabalhando, pode haver um problema em um futuro próximo. Eventos de erro e crítico acontecer apenas
quando
algo quebra, e CRÍTICA normalmente significa que o programa não pode continuar a trabalhar. O nível padrão
AVISO é, o que significa que, se você definir a sua função de registro de forma diferente, eventos dada uma
depuração ou INFO
gravidade (porque eles estão abaixo AVISO) não será registrada.
Para ver o módulo de registro em ação, tipo de python para iniciar um prompt de Python e digite o seguinte:
>>> Log de importação
>>> Logging.warning ("Eu sou um aviso.")
>>> Logging.info ("Eu sou uma informação.")
A segunda linha de saída vontade AVISO: root: Eu sou um aviso, enquanto a terceira linha, classificada como nível INFO,
vontade
não ser a saída para o console. Se, por outro lado, você entra
>>> Logging.basicConfig (nível = logging.DEBUG)
ele define o nível padrão de depurar, o que significa que cada evento será registrado ou saída, independentemente da gravidade.
Entrando
o nome do arquivo e formato, como fizemos anteriormente, define o arquivo de log e como os eventos são gravados.
■ Nota Registrando eventos é uma habilidade importante saber para qualquer programador; se você quiser saber
mais sobre logging do Python
módulo de forma mais aprofundada, eu recomendo que você leia a documentação Python em
http://docs.python.org/2/howto/
logging.html.

A formatação de um arquivo KML


Um arquivo KML é um tipo especial de XML (eXtensible Markup Language) utilizado pelo Google Earth para delinear pontos de
referência,
objetos, e até mesmo caminhos. Ela é semelhante a um arquivo HTML, com abertura e fechamento <> marcas para diferentes
níveis de
informações, como <Document> e </ Document>, e <coordenadas> e </ coordena>. Uma vez que nós temos o log
arquivo a partir do GPS, precisamos formatar as coordenadas incluídos em um arquivo KML que o Google Earth possa
reconhecer. Felizmente,
Capítulo 10 ■ O Avião Rádio-Controlado
isso é muito fácil, uma vez que formatado o arquivo de log só tem longitude, latitude e altitude, separados por
espaços-com format = '% (message) s' e) linha (logging.info. Agora podemos analisar cada linha no arquivo de log,
separá-lo por espaços com string.split, e escrevê-lo em um arquivo .kml pré-formatado. Ao usar o write () função,
podemos escrever cada linha para o novo arquivo, chamado "kml" no script, assim:
kml.write ('<Document> blah blah blah </ Document> \ n')
Desde que nós sabemos como o arquivo final KML precisa de olhar para o Google Earth para usá-lo, nós podemos realmente
escrever o programa
que analisa o arquivo antes de nossa avião nunca sai do chão. Dessa forma, tudo o que precisamos fazer é obter os dados para a
entrada do
arquivo de log real, o que nós vamos chegar quando o avião pousa. As outras partes do arquivo que não necessitam de
coordenadas real pode
ser formatado antes do tempo. Por exemplo, cada arquivo KML do Google Earth compatível começa com a linha
<? xml version = "1.0" encoding = "UTF-8"?>
que é seguida pela
<kml xmlns = "http://www.opengis.net/kml/2.2">
<Document>
<name>
e assim por diante. Assim, podemos escrever nosso script para adicionar essas linhas para o nosso arquivo plane.kml final.
Vamos escrever nosso código on-the-avião para tanto tirar uma foto e registrar a posição atual do GPS a cada 30 segundos ou
assim.
Porque nós estamos tomando pontos de dados em momentos determinados ao longo de um determinado percurso, podemos usar a
função caminho do KML para criar uma
registro visual de exatamente o que nosso avião fez. O caminho vai acabar procurando algo como o que você vê na figura 10-3.
Figura 10-3. Arquivo KML no Google Earth

Capítulo 10 ■ O Avião Rádio-Controlado


Lembre-se que porque estamos apenas polling a unidade GPS a cada 30 segundos, não teremos uma linha curva agradável.
Em vez disso, o caminho vai ligar os lugares onde o avião estava a esses intervalos, e as conexões serão retos
linhas. Como você pode ver na Figura 10-3, eu usei um parque de estacionamento para o meu teste de vôos de meu conselho para
um flyer começando é usar um
campo gramado, se puder, como pousos forçados na grama são susceptíveis de ser mais fácil em seu avião! Tudo no Alasca
estava coberta
pela neve durante os meus vôos de teste, por isso realmente não importa onde eu testei as coisas.

Usando threading e Objetos


Uma característica importante de programação que vamos usar neste programa é threads. Você pode tê-los visto antes; eu até
usá-los em um ou dois dos outros projectos neste livro. Tópicos são importantes porque permitem que o seu programa e
processador para fazer várias tarefas ao mesmo tempo, e eles não amarrar toda a memória e poder de processamento fazendo uma
simples
tarefa. Uma simples chamada para importar rosqueamento lhe dá o poder cheio de tópicos e todos eles podem fazer por você.
O QUE THREADS realmente fazer?
Threads permitir que seu computador (aparentemente) executar várias tarefas ao mesmo tempo. Digo
"aparentemente" porque a
processador ainda pode executar apenas um processo por vez, mas threads permitir que ele alternar entre
processos tão rápido que parece ser executá-los simultaneamente. Como exemplo, digamos que você está
trabalhando em seu
computador, com um processador de texto aberto em uma janela e um navegador de Internet aberto em outro.
Embora a palavra
corridas de processadores em um thread, outro thread (firmado entre seus traços essenciais) mantém o seu
navegador atualizado,
ainda outro verifica seu cliente de email para novas mensagens, e assim por diante.
O que nós vamos fazer com eles neste programa é usá-los para pesquisar o receptor GPS. Usando um fio, a página tampão
não vai encher-se com os dados à medida que continuamos a obter dados, mas ainda podemos registrar os dados no nosso arquivo
de log para uso posterior. Para usar segmentos
da maneira mais eficiente possível, nós vamos criar um objeto chamado Poller que irá solicitar informações do GPS
receptor de vez em quando (digamos que a cada três segundos), utilizando o módulo GPS. Toda vez que uma leitura posição,
vamos
atualizar o registro e tirar uma foto.

Objetos, classes e funções, OH MEU!


Direito aproximadamente agora, você provavelmente está começando a surtar um pouco: "Objetos? Classes? O que
ele está falando? "Citando
Douglas Adams, "Não entre em pânico." Considere isso uma tarefa fácil, não-estressante introdução à programação
orientada a objetos (OOP).
Pense em uma classe como um conjunto de objetos similares que compartilham certas características. Por exemplo,
quadrados, triângulos, e
pentágonos são todos os membros da forma de classe têm os lados, um perímetro calculável e uma área calculável.
Um
objeto é um membro em particular, ou exemplo, da classe que: myRectangle, por exemplo, é um exemplo da certo
moldar classe.
Quando você define uma classe, você define suas características, tais como o fato de que a forma tem lados e é
uma fechada
objeto. Você também pode definir as funções que são exclusivas para essa classe. Para ilustrar, cada membro da
forma classe
pode ter uma função definida que especifica como calcular o seu perímetro. Este cálculo pode variar de acordo com
a
o indivíduo forma objeto, por isso é exclusivo a esse objeto, mas cada forma objeto tem um defineArea () função.
O segmento que criamos em nosso programa final conterá um objeto-membro da Rosca de classe com um conjunto
de
variáveis e funções únicas para ele. Então, quando nós começamos nossa discussão, ele terá uma função de polling
GPS associado
que vai lidar com a recuperação de localização e tira uma fotografia.
Capítulo 10 ■ O Avião Rádio-Controlado
Nosso objeto de discussão será definido da seguinte forma:
myObject classe (threading.Thread):
def __init __ (self):
#function usado para iniciar a classe e linha
threading.Thread .__ o init __ (self)
#necessary para iniciar o segmento
run def (self):
#function realizada enquanto thread está sendo executado
A partir da parte principal do programa, podemos começar a discussão declarando um novo objeto myObject
(um novo tópico):
newObject = myObject ()
e depois iniciá-lo com
newObject.start ()
O segmento está funcionando agora com a sua própria instância de myObject, chamado newObject. O nosso rosca (como
mostrado na
o código final, no fim do cCapítulo) será iniciado com threading.Thread .__ o init __ (self). Uma vez que tenha sido
iniciado, ele vai continuar a executar a sua função (no nosso caso, a recolha de dados GPS e tirando fotos) até que saia
o programa.

Configurar inicialização automática


Porque é provável que nós não terá um monitor ou teclado conectado quando ligar o Pi antes de prendê-lo
ao plano, vamos precisar ter certeza de que o nosso script de registro GPS é iniciado automaticamente. A maneira mais fácil de
fazer isso é
adicionar uma entrada para o arquivo /etc/rc.local (como explicado na barra lateral "O que é o arquivo rc.local?"). No nosso caso,
se o nosso GPS
código de log é chamado getGPS.py, e ele é armazenado em nossa pasta Documents / avião, podemos adicionar a linha
/home/pi/Documents/plane/getGPS.py
para o arquivo rc.local. Abra-o com sudo
sudo nano /etc/rc.local
e adicione a linha
python /home/pi/Documents/plane/getGPS.py
para o arquivo, antes da última saída 0 linha no arquivo.

Capítulo 10 ■ O Avião Rádio-Controlado


O QUE É O rc.local?
O rc.local arquivo é uma parte padrão do kernel do Linux. É um dos inicialização do sistema rc arquivos e reside no
/ etc / diretório. Depois que o kernel inicializa todos os dispositivos na inicialização, ele atravessa os rc arquivos um
por um, correndo
os scripts contidas em cada um. O rc.local arquivo é o último a correr e contém scripts que não se encaixam em
qualquer
dos outros arquivos. Por esta razão, este arquivo é editável pelo administrador do sistema e é frequentemente
utilizado (como é aqui)
para manter scripts que precisam ser executados sempre que o computador é iniciado.
Um detalhe importante para lembrar sobre a adição de scripts neste arquivo que é porque ele não é executado como
qualquer
determinado usuário, você deve dar o script completo caminho, não apenas ~ / Documents / myscript.py, por exemplo.
No entanto, isso não é tudo o que precisamos fazer. Antes do programa GPS vai mesmo trabalhar, temos de ligar a alimentação
GPS
novamente, como fizemos quando estávamos a testar o cliente GPS genérico (anteriormente em "Conectar o receptor GPS para o
Pi"). assim
é preciso colocar essa linha em /etc/rc.local:
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
Finalmente, temos de esperar para a unidade GPS para obter uma correção em alguns satélites antes de iniciar o registro, caso
contrário, vamos
estar registrando um monte de 0.0,0.0, nan coordenadas. (A nan significa não um número.) Minha experiência é que leva
cerca de 30 segundos para a unidade para obter uma correção e começar a retornar dados reais, portanto, esperar 45 segundos
antes de iniciar o script é
provavelmente seguro. Para isso, basta colocar
45 sono
após a linha gpsd sudo você acabou de adicionar, e o sistema irá esperar 45 segundos antes de iniciar o script Python no
próxima linha. Quando estiver pronto, o arquivo /etc/rc.local deve terminar assim:
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
45 sono
python /home/pi/Documents/plane/gpstest.py
Salvar e sair, e o script será executado na inicialização.
Ligação dos Bits
Depois de ter o plano, a construção deste projeto é relativamente fácil. Você vai precisar de uma bateria para o Pi e um regulador
para fazer
se você não está dando-lhe muito suco. Eu particularmente sou fã das baterias Li-Po (mostrado na Figura 10-4) que RC
Os adeptos de usar, porque eles são leves e embalar um lote de potência em um pacote pequeno. Os que eu uso me dar 1.3A para
um
hora-muito mais do que eu preciso.

Capítulo 10 ■ O Avião Rádio-Controlado


Figura 10-4. Lithium Polymer (Li-Po) baterias
Para o regulador de tensão, Eu cortei um carregador de carro USB, como mostrado na Figura 10-5.
Figura 10-5. Carregador de carro Hacked
Capítulo 10 ■ O Avião Rádio-Controlado
O terminal do meio vai para (+) da bateria de chumbo, e um dos terminais exteriores vai ao GND. Em seguida, um simples
Cabo USB fica conectado ao Pi, e você tem o poder.
Quando se trata de colocar tudo no avião, é uma espécie de miscelânea. Os detalhes importantes para lembrar
são para manter o avião equilibrado, e não interromper o fluxo de ar para cima das asas. Eu coloquei o GPS no nariz, e gravou o
Pi para as linhas laterais. É meio difícil de ver na foto na Figura 10-6, mas a câmara está colado na asa porta, apontou
para o chão. Logo atrás da asa você pode ver o plugue USB que será conectado ao Pi. Os olhares Instalação concluída
desajeitado, mas ele voa muito bem.
Figura 10-6. Uma visão geral da configuração
Figura 10-7 mostra como I anexa a unidade GPS para o nariz do avião.
Figura 10-7. Um close up da unidade de GPS no nariz do avião
Capítulo 10 ■ O Avião Rádio-Controlado
Figura 10-8 mostra como I anexa o Pi a asa do avião.
Figura 10-8. Um close up de Pi na asa do avião
Quando você está pronto para ir e ter feito todas as suas pré-voo verificações, ligue o Pi e esperar 45 segundos para o
plane.py roteiro para iniciar e para a unidade GPS para adquirir alguns satélites. Em seguida, retire e obter algumas ótimas fotos!
Quando você está de volta para casa com o Pi, faça o login para ele e executar o script de conversão .kml, chamado kml.py aqui.
Esse script
abrirá o arquivo locations.log criado pelo script plane.py, analisar o seu texto, e escrever todos os seus locais incluídos
em um arquivo .kml válido, chamado plane.kml.
Você pode então transferir o arquivo para qualquer computador com o Google Earth instalado. Quando ele é carregado em seu
computador,
clique com o botão direito sobre o arquivo e abra o "Abrir com. . ." cardápio. Localizar "Google Earth" nas opções do programa e
clique em Abrir
(como mostrado na Figura 10-9).
Capítulo 10 ■ O Avião Rádio-Controlado
Figura 10-9. Plane.kml Abertura com o Google Earth em um Mac
Quando o arquivo é carregado, você vai ter uma imagem como a do estacionamento na Figura 10-3 no início do cCapítulo. o
fotos tiradas por sua câmera, por sua vez, estará localizado na mesma pasta que o arquivo gpstest.py ou onde quer que você
especifique em seu script. (Veja o código final no final deste cCapítulo para obter um exemplo.)
Aqui vai uma dica final: Porque você colocar o script gps no seu arquivo /etc/rc.local, ele vai continuar a iniciar cada vez
você ligar até que você remova essa linha do arquivo. Se você quer matar o script gps para que ele não está funcionando no
fundo e utilizando recursos do processador, mas você não tenha chegado a cerca de excluir a sua linha de rc.local, tipo
topo
em um terminal. Este comando mostra todos os processos actualmente em execução no Pi. Para parar o script Python, procure
um processo intitulado "python" e observe o PID (ID do Processo) na primeira coluna. Pressione "Q" para sair topo, em seguida,
digite
sudo matar xxxx
onde xxxx é o PID que anotou anteriormente. Isso vai matar o script Python até que você remova sua linha de rc.local
e reiniciar.

O código final
O código final é composta de duas partes: o programa de avião e o programa de conversão de KML.

Capítulo 10 ■ O Avião Rádio-Controlado


O Programa plano
Esta parte do programa é o que é executado enquanto o avião estiver no ar, tirando fotos e registrando coordenadas GPS. É do
disponível como plane.py de Apress.com:
import os
gps de importação *
do tempo de importação *
tempo de importação
rosqueamento de importação
logging importação
de subprocess chamada de importação
#set up do arquivo de log
logging.basicConfig (filename = 'locations.log', nível = logging.DEBUG,
format = '% (mensagem) s')
picnum = 0
gpsd = None
classe GpsPoller (threading.Thread):
def __init __ (self):
#initializes fio
threading.Thread .__ o init __ (self)
gpsd mundial
gpsd = gps (mode = WATCH_ENABLE)
self.current_value = None
self.running = True
run def (self):
#actions feita pelo fio
gpsd mundial
enquanto gpsp.running:
gpsd.next ()
E se
__name__ == '__main__':
#if na seção principal do programa,
GPSP = GpsPoller ()
#start um fio e iniciar o registro
experimentar:
#e tirar fotos
gpsp.start ()
while True:
#log de localização GPS
logging.info (str (gpsd.fix.longitude) + "" + str (gpsd.fix.latitude) + "" +
str (gpsd.fix.altitude))
#save imagem numeradas no diretório correto
ligue para (["raspistill -o / home / pi / Documents / plano / imagem" + str (picnum) +
".jpg"], shell = True)
picnum = + 1 picnum
número de imagem #increment
time.sleep (3)
exceto (KeyboardInterrupt, SystemExit):
gpsp.running = False
gpsp.join ()

Capítulo 10 ■ O Avião Rádio-Controlado


Programa de Conversão KML
Este programa é executado quando o Pi está de volta no chão. Leva o arquivo de log GPS e converte-lo para um arquivo KML. É
do
disponível como kml.py de Apress.com:
import string
#open arquivos para leitura e escrita
gps = open ('locations.log', 'r')
kml = open ('plane.kml', 'w')
kml.write ('<? xml version = "1.0" encoding = "UTF-8"?> \ n')
kml.write ('<kml xmlns = "http://www.opengis.net/kml/2.2"> \ n')
kml.write ('<Document> \ n')
kml.write ('<nome> Plane Path </ name> \ n')
kml.write ('<description> Caminho feita pelo avião </ description> \ n')
kml.write ('<Style id = "yellowLineGreenPoly"> \ n')
kml.write ('<LineStyle <color> 7f00ffff </ color> <largura> 4 </ largura> </ LineStyle> \ n')
kml.write ('<Polystyle> <color> 7f00ff00 </ color> </ Polystyle> \ n')
kml.write ('</ Style> \ n')
kml.write ('Placemark> <name> Plane Path </ name> \ n')
kml.write ('<styleUrl> #yellowLineGreenPoly </ styleUrl> \ n')
kml.write ('<LineString> \ n')
kml.write ('<expulse> 1 </ expulse> <tesselate> 1 </ tesselate> \ n')
kml.write ('<altitudeMode> parente </ altitudeMode> \ n')
kml.write ('<coordenadas> \ n')
para a linha de GPS:
corda #separate por espaços
coordenar = string.split (linha)
longitude = coordenar [0]
latitude = coordenar [1]
altitude = coordenar [2]
kml.write (longitude + "," + latitude + "," + altitude + "\ n")
kml.write ('<\ coordena> \ n')
kml.write ('</ LineString> \ n')
kml.write ('</ Placemark> \ n')
kml.write ('</ Document> \ n')
kml.write ('</ kml> \ n')

Resumo
Neste cCapítulo, nós conectamos um GPS para o Pi e ler sua entrada via conexões UART do Pi. Em seguida, colocar isso
informações em um arquivo de log Python. Nós preso a Pi e os GPS para um avião rádio-controlado e registrado o nosso vôo,
tirar fotos a cada poucos segundos, como nós voamos. Em seguida, após a aterragem do avião, nós transcodificamos nosso
arquivo de log do GPS a um KML
arquivo e colocar esse arquivo para o Google Earth para ver um ecrã de satélite de nossa trajetória de vôo final. Este cCapítulo
demonstrou a
verdadeira portabilidade do Raspberry Pi.
No próximo cCapítulo, vamos dar o Pi ainda mais alto, enviando-o em um balão meteorológico para a atmosfera superior.

Capítulo 11
The Weather Balloon
Você pode estar familiarizado com balões meteorológicos. Às vezes até 20 pés de diâmetro, que pode ser preenchido com hélio,
dada uma pequena carga útil científica, e ascender aos limites superiores da atmosfera, levando e gravando vários
as leituras dos sensores como eles vão. Em seguida, quando a pressão do lado de fora torna-se significativamente menos do que a
pressão interior da
o balão, que estourou, ea carga cai de volta à Terra com a ajuda de um pequeno pára-quedas. O grupo que
lançou o balão rastreia o pacote caído e recupera os dados. Desta forma, os cientistas e os aficionados podem
aprender muito sobre os alcances superiores da atmosfera.
Apesar de operar o avião controlado por rádio com um Raspberry Pi no cCapítulo anterior foi legal, foi
também domar um pouco em que nós conectado a sua posição e carregou seus dados de caminho para o Google Earth. O conceito
por trás
este projeto, a construção de um balão meteorológico, é muito simples, mas mais avançado. Vamos inflar e lançar um tempo
pequeno
balão capaz de enviar o Raspberry Pi para pelo menos 30.000 pés. Vamos então programar o Pi para tirar uma foto a cada tantas
muitas vezes, dando-nos um registro pictórico de nosso vôo e usar uma pequena unidade de GPS para registrar a viagem de nosso
Pi.
Mas não vamos parar por aí, porque esse é o tipo de chato, e que tem sido feito por muitos aquaristas diferentes e
profissionais. Além disso, nós vamos chegar uma atualização, em tempo real, como o que o balão está fazendo-a sua latitude,
longitude,
e até mesmo na altitude a programação do Pi para registrar-se falando suas coordenadas a cada 15 segundos ou assim. Então nós
vamos
transmitir que a gravação de um rádio no chão. Tudo o que precisamos fazer é sintonizar nossa rádio FM pequeno para um pré-
designado
freqüência, e nós vamos ser capazes de ouvir nosso balão falando para nós, dando-nos as atualizações ao vivo sobre sua condição.
Vamos ir às compras para peças!
■ Cuidado Nos Estados Unidos, os regulamentos da FAA exigem que você notificar a agência de 6 a 24 horas
antes de seu lançamento com
informações relevantes, tais como a hora e o local do lançamento, altitude previsto, balão de descrição e previsão do
o desembarque de localização. A FAA também exige que você manter o controle de localização do balão e ter a
capacidade de atualizar o FAA com
que as informações que devem ser exigidos. Regulamentos diferentes para ancorado contra balões livres; Para obter
mais informações, consulte o pleno
regulamentos em http://www.gpo.gov/fdsys/pkg/CFR-2012-title14-vol2/pdf/CFR-2012-title14-vol2-part101.pdf.

A Lista de Compras de Peças


Como o plano de RC, este é um dos projetos mais caros do livro, mesmo porque balões meteorológicos pode ser sorte
de caro, e você vai precisar comprar ou alugar um tanque de hélio de uma casa de abastecimento loja da fonte do partido ou
soldagem.
Aqui está o que você vai precisar:
• Pi Raspberry com placa da câmara
• bateria LiPo e regulador de 5V para alimentar o Pi
• tempo de látex balão diâmetro 6-7 pés
• receptor-GPS (https://www.adafruit.com/products/746)

Capítulo 11 ■ O Tempo Balão


• Antena para GPS (opcional) - (https://www.adafruit.com/products/851)
• rádio Handheld AM / FM

Comprimento de 10 pés de arame
• caixa de isopor pequeno
• foguete pára-quedas Modelo
• aquecedores de mão
• linha de Pesca menos 5000 jardas

1-pé tubo cirúrgico, cerca de 1 polegada ID
• hélio-250 pé cerca de 3
• A fita adesiva, fita isolante, elásticos, laços zip

Configuração do Receptor GPS


Tal como acontece com o projeto plano de RC no Capítulo 10, parte integrante deste projeto é fazer com que a unidade de GPS
instalado e funcionando com
o Pi. Para fazer isso, você está indo para instalar o módulo gpsd Python, e usar do Pi Universal Asynchronous Receiver /
Transmissor (UART) pins, # 7 e # 8. O módulo gpsd Python é parte de uma biblioteca maior de código concebido para permitir
dispositivos como o Pi para monitorar GPS ligado e sistema de identificação automática (AIS) receptores, com portas para C,
C ++, Java e Python. Ele permite que você "ler" os dados National Marine Electronics Association formatados transmitida
pela maioria dos receptores GPS.
A interface UART é um velho; é basicamente uma conexão serial (RS-232), mas para os nossos propósitos é tudo que
precisamos.
Ele consiste em um positivo (+) e negativo (-) de conexão para energia e transmitir e receber pinos. Comece digitando o
seguinte linha para instalar o software que você precisa para ler os GPS, gpsd, e seus programas associados:
sudo apt-get install DSGP-clientes DSGP python-gps
Isto irá instalar gpsd e todas as suas dependências e programas associados. Em seguida, você precisa configurar o
Pi se comunicar através de seu UART Tx (transmissão) e Rx (receber) os pinos, porque a sua configuração padrão é
comunicar-se com uma janela de terminal. Para fazer isso, primeiro fazer uma cópia de /boot/cmdline.txt:
sudo cp /boot/cmdline.txt /boot/cmdlinecopy.txt
e depois editá-lo digitando sudo nano /boot/cmdline.txt. Excluir a seguinte linha:
console = ttyAMA0,115200 kgdboc = ttyAMA0,115200
para que o arquivo lê
dwc_otg.lpm_enable = 0 console = tty1 raiz = / dev / mmcblk0p2 rootfstype = ext4 elevador = prazo rootwait
O arquivo /boot/cmdline.txt passa argumentos para o kernel do Linux, como as botas Pi.
Depois de salvá-lo, edite o arquivo inittab digitando
sudo nano / etc / inittab
e comente a linha que informa o Pi para iniciar uma conexão terminal (a última linha):
# T0: 23: de respawn: / sbin / getty -L ttyAMA0 115200 vt100

Capítulo 11 ■ O Tempo Balão


Agora reinicie digitando sudo reinicialização.
Enquanto o Pi reinicializado, soldar os cabeçalhos que veio com ele para o seu bordo GPS. Você não vai precisar usar toda a
conexões para este projeto (você só vai precisar de quatro deles, na verdade), mas você pode precisar os outros pinos mais tarde,
por isso certifique-
Certifique-se de conectar as também.
Quando o Pi voltar a ficar online, ligar o seu receptor GPS a ele. Usando jumpers, siga estes passos:
1.
Conecte VIN do conselho de 5V pino do Pi (# 2).
2.
Conecte o pino GND à terra do Pi (# 6).
3.
Conecte os pinos Tx e Rx de Rx e Tx pins da Pi, respectivamente (# 10 e # 12).
Você deve obter imediatamente uma luz vermelha piscando na unidade GPS, permitindo que você saiba a placa é ligada. Se você
comprou a antena externa opcional para o seu GPS (nunca uma má idéia), conecte-o ao conector pequeno no
borda. Pode levar algum tempo para a sua unidade de "ver" qualquer satélite, especialmente se você estiver dentro de casa. No
entanto, você vai saber
quando isso acontecer: a luz vermelha que foi previamente piscar uma vez por segundo vai abrandar, piscando uma vez a cada 15
segundos, indicando que o GPS tem uma correção em satélites.
Para usar o programa gpsd, você precisa iniciá-lo, digitando
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
em seu terminal. Então, para ver a informação GPS atual, inicie o cliente GPS genérico, digitando
CGPS -s
Pode levar apenas um momento para que os dados começam a transmitir para o monitor, mas quando isso acontece você deve ver
uma tela
como a Figura 11-1.
Figura 11-1. O visor CGPS
O cliente CGPS é um visualizador genérico; ele simplesmente pega os dados do programa gpsd está recebendo e exibe para o
do utilizador. Nós não vai usar o display-lo CGPS é apenas uma maneira prática de ter certeza que a unidade GPS está ligado
corretamente e
está funcionando. Nós vamos usar o módulo GPS do Python para se comunicar com a placa de GPS.

Capítulo 11 ■ O Tempo Balão


Armazenar os dados de GPS
Para este projeto, você estará escrevendo os dados do GPS em um arquivo, para ser lido, gravado e transmitido mais tarde. Nós
poderíamos usar um
log arquivo para isso, como fizemos para o projeto de plano de RC, mas também é importante que você aprenda a usar Python
para ler
e gravar arquivos normais. Em seu terminal, inicie um prompt de Python e tipo
f = open ('testfile.txt', 'w')
Isso abre um arquivo-neste caso, testfile.txt. O segundo parâmetro pode ser um dos quatro valores seguintes:
• 'r' O arquivo é somente leitura.
• 'w' O arquivo é apenas para escrever. (Dados anteriores serão apagados toda vez que o arquivo é aberto.)
• 'a' O arquivo será anexado.
• 'r +' O arquivo está aberto para leitura e escrita.
Para continuar, digite
f.write ("Este é um teste de minha escrita-arquivo ')
f.close ()
Se você sair agora seu prompt Python pressionando Ctrl + d e listar o conteúdo do diretório, você verá testfile.txt
listado, e visualizar o seu conteúdo irá mostrar-lhe a linha que você acabou de inserir. Agora, tente novamente: iniciar outro
prompt Python
e tipo
f = open ('testfile.txt', 'w')
f.write ('Este texto deve substituir o primeiro texto')
f.close ()
e sair de sua linha de Python. Porque você abriu o arquivo usando um parâmetro 'w', todo o texto original foi substituído.
Isto é o que você estará fazendo em nosso arquivo de localização GPS. Nós não estamos interessados em salvar os locais, como
fizemos antes;
em vez disso, cada local será gravado e, em seguida, transmitidos, e então podemos substituí-lo com o próximo local por
abrindo-o com a bandeira 'w'.
Instalando PIME
Para obter o seu Pi falar com você sobre o rádio, você precisará usar um pouco de corte prático desenvolvido pelos companheiros
no
Imperial College Robotics Society, em Londres. O módulo, chamado PIME, usa hardware existente do Pi para transformá-lo em
um
agradável transmissor FM pouco.
Para usar o módulo, primeiro você tem que baixá-lo. Em seu diretório / balão, abra um terminal e digite
wget http://omattos.com/pifm.tar.gz
Quando é feito o download, extraí-lo digitando
tar -xvzf pifm.tar.gz

Capítulo 11 ■ O Tempo Balão


Isto irá colocar um binário compilado, bem como o código fonte e alguns arquivos de som, em seu diretório. Você é agora
pronto para usar o pacote PIME. Para testá-lo, anexar um fio longo pé-to do seu Pi pino # 7 (GPIO pin # 4). Agora, em seu
terminal, digite
sudo ./pifm sound.wav 100,0
e sintonizar o seu rádio para 100,0 FM. Você deve ser recompensado com uma melodia familiar. Se por acaso você não ouvir
qualquer coisa,
tente adicionar '22050' ao final do comando, porque esse parâmetro extra (a taxa de amostragem do arquivo de som) pode
ser necessário declarar explicitamente, dependendo da versão do software que você tem.
Parabéns! Você transformou sua Pi em um transmissor de rádio. Agora, vamos torná-lo um DJ.
Instalando festival
Tenho certeza que a maioria de nós adoraria se nossos computadores iria falar com a gente. Felizmente, uma vez que estamos
usando Linux, temos um
poucas opções quando se trata de um bom programa sintetizador de voz. O que nós vamos usar, festival, é gratuito e muito
fácil de usar. Ele também vem com uma função de gravação acessível text-to-speech que vamos usar.
festival está disponível a partir de seus repositórios Pi padrão, o que significa que, para usá-lo, você só precisa digitar
sudo apt-get install festival
em seu terminal, e ele irá baixar e instalar. Uma vez que o processo de download e instalação for concluída, experimentá-lo.
Conecte um par de fones de ouvido de 3,5 mm de áudio para fora do seu Pi. Então, em seu terminal, digite o seguinte:
echo "Sinto muito Dave, eu tenho medo que eu não posso fazer isso." | festival --tts
e sua Pi vai continuar a falar com você. (No caso de você não sabe, essa linha é falado pelo computador, HAL, no
clássico filme 2001: Uma Odisséia no Espaço. Se você ainda não viu, colocar este livro para baixo e ir vê-lo. Agora. Eu
esperarei.)
Ok, então agora você pode fazer o seu Pi falar o que quer que linha você diga a ele na linha de comando. Enquanto isso é muito
legal, precisamos ter que ler uma linha de um arquivo de texto: algo como "atuais altitude de 10.000 pés, a posição atual 92
graus de latitude, 164 graus de latitude. "A maneira mais fácil de fazer isso é usar a função text2wave muito útil do festival.
Esta função lê a partir de uma Position.txt arquivo, por exemplo, e faz uma gravação dele. Sua sintaxe é
text2wave Position.txt -o position.wav
Agora, sabendo que nós estaremos atualizando o arquivo Position.txt a cada 15 segundos, podemos apenas usar o text2wave
função para re-gravar o seu conteúdo antes de difusão que a gravação usando PIME.
Há um pequeno senão, no entanto: text2wave codifica suas gravações, utilizando uma taxa de amostragem de 44100 kHz, e PIME
precisa de uma gravação com uma taxa de amostragem de 22050 kHz. Isso requer um outro programa para o nosso kit de
ferramentas-ffmpeg.
Instalando FFMPEG
No mundo dos codificadores de áudio e vídeo, decodificadores e transcodificadores, ffmpeg é definitivamente um dos mais
populares e
poderosos programas disponíveis. Ele pode transcodificar arquivos de filme de MPG para o formato AVI, separar um arquivo
AVI em seu indivíduo
frames, e até mesmo separar o áudio de um filme, executá-lo através de filtros sucessivos, e anexá-lo novamente para o vídeo.
No entanto, embora todos esses feitos são impressionantes, todos nós precisamos usá-lo para é mudar a nossa áudio de 44100 kHz
para
22050 kHz. Começar a instalar-lo digitando
sudo apt-get install ffmpeg

Capítulo 11 ■ O Tempo Balão


em seu terminal. Há muitas opções de instalação e configuração diferentes, mas este é o mais fácil e mais
direto. Agora, para converter nosso arquivo position.wav, usamos a seguinte sintaxe, então digite
ffmpeg -i "position.wav" -y -ar 22050 "position.wav"
Dependendo de quando você estiver lendo este cCapítulo, você pode receber o seguinte aviso de reprovação: "Este programa
só é fornecido para compatibilidade e será removido em uma versão futura. "O comando ainda deve funcionar, mas se você
preferir, você pode usar o comando, avconv da substituição, assim:
avconv -i "position.wav" -y -ar 22050 "position.wav"
É isso-position.wav agora foi re-codificados com uma taxa de amostragem de 22050 kHz e está pronto para ser transmitido. E se
queremos transmitir o conteúdo do position.wav, gostaríamos de digitar em um terminal
sudo ./pifm position.wav 103,5 22050
(103.5 FM é a freqüência que será transmitido para. Ajuste de suas estações locais, é claro.)

Preparando o Pi
Se você estiver lendo este cCapítulo depois que o avião cCapítulo RC, você pode reconhecer a maior parte da configuração aqui,
como muitos de
as partes deste projeto são muito semelhantes. A primeira coisa que você precisa fazer é certificar-se de que o módulo será gpsd
correndo cada vez que você iniciar o Pi. Para fazer isso, abra o arquivo rc.local, digitando
sudo nano /etc/rc.local
e adicione a seguinte linha ao final:
sudo gpsd / dev / ttyAMA0 -F /var/run/gpsd.sock
■ Nota Para mais informações sobre o rc.local arquivo, consulte a barra lateral no cCapítulo 10.
Agora, o módulo gpsd será executado cada vez que iniciar o Pi.
No entanto, nós não somos feitos no arquivo rc.local. É provável que quando você lançar o balão, você vai querer apenas
alimentar o Pi e lançamento, sem ter que se preocupar com o login e iniciar o programa que você escreveu.
Felizmente, você pode fazer isso com o arquivo rc.local também. Na inicialização, após o módulo gpsd lança, você vai querer dar
sua placa GPS alguns segundos para obter uma correção em alguns satélites antes de começar o registro de dados. Para isso, após
a linha gpsd
apenas mostrado, adicione a linha
sono (45)
para fazer a pausa Pi por 45 segundos e, em seguida, adicione a linha
sudo python /home/pi/Documents/balloon/balloon.py
(Certifique-se esta linha jogos onde quer que você está armazenando o seu programa de balão, é claro.) O seu programa de balão
vai
agora começar automaticamente, 45 segundos após seu módulo GPS começa a ler dados de suas correções de satélite.

Capítulo 11 ■ O Tempo Balão


Usando threading e Objetos
Uma característica importante de programação que vamos usar neste projeto é threads. Se você já construiu o projeto de plano de
RC em
Capítulo 10, este será o velho chapéu para você. Se você não tem, no entanto, aqui está um rápido resumo.
Tópicos são importantes porque permitem que o seu programa e processador para fazer várias tarefas ao mesmo tempo, e eles não
amarrar toda a memória e poder de processamento fazendo uma tarefa simples. Uma simples chamada para importar
rosqueamento dá-lhe a
potência máxima de tópicos e todos eles podem fazer por você.
O que threads realmente fazer? Threads permitir que seu computador (aparentemente) executar várias tarefas ao mesmo tempo. eu
digo
"Aparentemente" porque o processador ainda pode executar apenas um processo por vez, mas threads permitir que ele volte e
para trás entre processos tão rápido que parece ser executá-los simultaneamente. Para mais de uma introdução aos tópicos,
consulte a barra lateral no cCapítulo 10.
O que nós vamos fazer com eles neste programa é usá-los para pesquisar o receptor GPS. Usando um fio, a página tampão
não vai encher-se com os dados à medida que continuamos a obter dados, mas ainda podemos registrar os dados em nosso
arquivo Position.txt para uso posterior.
Para usar tópicos da maneira mais eficiente possível, nós vamos criar um objeto chamado Poller que irá solicitar informações
a partir do receptor GPS a cada 15 segundos, utilizando o módulo de GPS. Toda vez que uma leitura posição, vamos atualizar o
arquivo de texto e tirar uma foto.
■ ■ Nota Para uma reciclagem sobre objetos, classes e programação orientada a objeto, consulte a barra lateral no
cCapítulo 10.
Nosso objeto de discussão será definido da seguinte forma:
myObject classe (threading.Thread):
def __init __ (self):
#function usado para iniciar a classe e linha
threading.Thread .__ o init __ (self)
#necessary para iniciar o segmento
run def (self):
#function realizada enquanto thread está sendo executado
A partir da parte principal do programa, podemos começar a discussão declarando um novo objeto myObject (um novo tópico):
newObject = myObject ()
e depois iniciá-lo com
newObject.start ()
O segmento está funcionando agora com a sua própria instância de myObject, chamado newObject. O nosso rosca (como
mostrado na
o código final, no fim do cCapítulo) será iniciado com threading.Thread .__ o init __ (self). Uma vez que tenha sido
iniciado, ele vai continuar a executar a sua função (no nosso caso, a coleta de dados GPS, transmitindo-o e tirando fotos)
até que saia do programa ou desligar o Pi.

Ligação dos Bits


A construção deste projeto balão de tempo pode ser bastante envolvido, por isso reserve algumas horas para que tudo fique
pronto.
A primeira coisa a fazer é configurar o tanque de hélio. Quando você alugar o tanque, ele deve vir com um regulador e um
tilt-mamilo usado para encher balões. Isto pode ser utilizado para encher o balão, com uma pequena modificação. Deslize o
cirúrgico
tubulação sobre o regulador e fita-lo de forma segura. A tubagem pode então ser inserida no gargalo do balão para enchê-lo
(como mostrado na Figura 11-2) e protegidas com um laço de fecho de correr.
Capítulo 11 ■ O Tempo Balão
Figura 11-2. Configuração pescoço Regulador-balão
Com a conexão regulador-balão garantido, você pode montar sua carga útil. Corte um pequeno buraco no
inferior de sua caixa de isopor grande o suficiente para caber placa da câmera do Pi. Encaixe a câmera no buraco, garantindo
-lo com fita se necessário. (Veja a Figura 11-3.) Na parte inferior do cooler, instale o Pi e sua bateria, pronto para
conectar em cima do lançamento missão.
Figura 11-3. Câmera posicionada no refrigerador
Capítulo 11 ■ O Tempo Balão
Picar um pequeno furo no fundo do refrigerador. Este é o local onde a antena GPS, antena FM, e corda do balão vai.
Deslizá-los através do buraco e se conectar a antena FM para o Pi pin # 7. Junte a sua placa de GPS para o Pi se não for
já (consulte a seção "Configuração do Receptor GPS" no início do cCapítulo), e se conectar a antena ao GPS.
As duas antenas deve ser pendurado livremente para fora do fundo, e a corda deve ser conectado à sua linha de pesca
carretel. Fixe a extremidade livre da corda para o seu refrigerador de uma forma que não vai rasgar o refrigerador; Eu cortei um
pedaço de tubo de PVC a
comprimento do arrefecedor e a corda amarrada a ele. (Veja a Figura 11-4.)
Figura 11-4. Interior do refrigerador que mostra o tirante ligado a um tubo de PVC
Agora quebrar abrir os aquecedores de mão e ativá-los agitando e misturando o conteúdo. Lay-los na
fundo do refrigerador, e colocar o seu pacote de Pi e bateria em cima deles. Os aquecedores de mão são importantes porque
fica bastante frio na atmosfera-frio suficiente para fazer com que seus produtos eletrônicos para parar de trabalhar superior. Os
aquecedores
deve manter o interior do refrigerador quente o suficiente para permitir que o seu Pi para continuar a trabalhar no ápice de seu
vôo.
Você precisará anexar o pára-quedas para a tampa do seu refrigerador como uma maneira de salvar a sua Pi no caso de os balão
estoura.
Descobri que a melhor maneira de fazer isso é fazer um buraco na tampa, enrosque as cordas do pára-quedas através do furo, e
prenda
los para a tampa com cola quente. Em seguida, vagamente amarrar uma corda em torno da calha-força suficiente para manter o
pára-quedas fechado
upon subida, mas com folga suficiente para permitir que a rampa para quebrar livre e aberta caso o cooler começa caindo em
queda livre.
Capítulo 11 ■ O Tempo Balão
As últimas coisas a fazer são ligue o Pi, tape a tampa firmemente para o refrigerador, e anexá-lo ao balão cheio.
Quando o balão está no seu volume desejado (e esta variará com o peso do seu carga útil, de forma alguma experimentação
é necessário), removê-lo do tanque e amarrar o fim, quer com laços zip ou bandas de borracha. Em seguida, anexar o pescoço de
o balão para o seu refrigerador, novamente usando laços zip, e liberá-lo. O balão flutuará na atmosfera, tirando fotos
como ela vai. Enquanto isso, sintonizar o seu rádio FM para 103,5 (ou qualquer estação que você definir em seu código final) e
ouvir o
atualizações ao vivo como seu balão lhe diz exatamente o quão alto ele é. A menos que ele explode (sempre uma possibilidade
distinta), o balão
deve viajar para o final da linha de pesca anexo, que é uma boa razão para obter o máximo de linha como você pode, a fim de
permitir que o seu balão para subir o mais alto possível. Quando é hora de recuperar o seu balão, use a linha de pesca ligados a
bobina-lo de volta. Para salvar os músculos do braço, você pode querer adicionar o carretel de linha de pesca para uma furadeira
elétrica.
■ ■ Nota Verifique com sua filial local da FAA ou equivalente antes de voar o seu balão para determinar o melhor
momento
e colocar para o lançamento.
Revendo os resultados Photo
Infelizmente, eu não posso te mostrar quaisquer resultados reais da PiBalloon ainda; como acontece, durante a minha viagem
inaugural, o
câmera no meu Pi deixou confusa e foi voltado para o isopor e gravado sem imagens que seja. No entanto, a Figura 11-5
mostra o tipo de imagem que você deve ser capaz de gravar.
Figura 11-5. Cordilheira do Alasca (foto © 2013 pela NASA)

Capítulo 11 ■ O Tempo Balão


Minha versão do PiBalloon estará voando novamente em breve; verificar o site para este livro para obter mais detalhes e
esperemos que algumas fotos melhores.

O código final
Este código (disponível como balloon.py de Apress.com) irá consultar o GPS de bordo, registrar e transmitir suas coordenadas,
e tirar uma foto com a câmera periodicamente a bordo:
import os
gps de importação *
tempo de importação
rosqueamento de importação
subprocess importação
#set-se variáveis
picnum = 0
gpsd = None
classe GpsPoller (threading.Thread):
def __init __ (self):
threading.Thread .__ o init __ (self)
gpsd mundial
picnum mundial
gpsd = gps (mode = WATCH_ENABLE)
self.current_value = None
self.running = True
run def (self):
gpsd mundial
enquanto gpsp.running:
gpsd.next ()
E se
__name__ == '__main__':
GPSP = GpsPoller ()
experimentar:
gpsp.start ()
while True:
f = open ('Position.txt', 'w')
curAlt = gpsd.fix.altitude
curLong = gpsd.fix.longitude
curLat = gpsd.fix.latitude
f.write (str (curAlt) + "pés de altitude," + str (curLong) + "graus de longitude," +
str (curLat) +
"
graus de latitude ")
f.close ()
subprocess.call (["text2wave Position.txt -o position.wav"], shell = True)
subprocess.call (['ffmpeg -i "position.wav" -y -ar 22050 "position.wav"'], shell = True)
subprocess.call (["sudo ./pifm position.wav 103,5 22050"], shell = True)
subprocess.call (["raspistill -o / home / pi / Documents / balão / imagem" + str (picnum) +
".jpg"], shell = True)

Capítulo 11 ■ O Tempo Balão


picnum = + 1 picnum
time.sleep (15)
exceto (KeyboardInterrupt, SystemExit):
gpsp.running = False
gpsp.join ()

Resumo
Neste cCapítulo, você programou o seu Pi para obter a sua localização a partir de um módulo GPS e transmitir a sua localização
para você, para que
você pode ficar no chão e enviá-lo para a atmosfera superior para tirar fotos. Você trabalhou com tópicos de novo,
bem como um pouco mais com código orientado a objeto, e tem algumas boas fotos do alto, eu espero.
No próximo cCapítulo, vamos na direção oposta e enviar o underwater Pi.

Capítulo 12
O submersível
Submersíveis, tanto remotamente operados e autônomo, têm sido usados tanto para fins de investigação científica e
empresa privada por várias décadas. Eles estudaram a vida nas planícies áridas intercontinentais, têm explorado
respiradouros vulcânicos no meio do Oceano Atlântico, e tem ido lugares impossíveis para os seres humanos para ir. no
mundo comercial, que estavam no centro das atenções durante o desastre de petróleo Deepwater Horizon em 2010. A frota de
submersíveis foi usada para tampar o poço de petróleo e interromper o vazamento em 5.000 pés profundidades-muito abaixo do
que poderia mergulhadores humanos
alcance. Eles são usados rotineiramente para realizar manutenção em plataformas de petróleo do fundo do mar e fazendas de
ondas offshore.
Existem basicamente dois tipos de submersível:. ROVs e AUVs ROV significa Veículo de Operação Remota, e
descreve um sub que é controlado remotamente a partir de um navio por meio de uma corda-um cabo que fornece energia para o
sub e
uma comunicação bidireccional com os seus sistemas de bordo. Normalmente, uma câmera onboard envia um sinal de vídeo até a
corda
a um monitor na sala de controle, onde um operador treinado especialmente usa o sinal de vídeo para controlar o sub com um
versão high-tech de um controlador Xbox. O operador remoto controla o sub propulsão, governo, e profundidade, e
essa pessoa também é capaz de trabalhar garras do veículo e coletores de amostra, assumindo-se assim equipado.
AUV, por outro lado, meios Autonomous Underwater Vehicle e descreve um submersível que funciona
sem intervenção humana ou de controlo. Ele pode ou não usar uma câmera a bordo; se isso acontecer, o vídeo da
câmera é muitas vezes usado apenas para fins de coleta de dados, não para a navegação. Um AUV tem uma variedade de sensores
a bordo
e um computador de bordo relativamente sofisticado que está programado para executar uma variedade de tarefas e movimentos,
com base em informações dos sensores.
Usando o Raspberry Pi, você pode realmente construir quer um ROV ou um AUV em grande escala, mas para os nossos
propósitos nós somos
vai fazer um veículo (muito mais simples) operado remotamente. Podemos usar a câmera onboard do Pi para tirar fotos de
nossas explorações subaquáticas, e podemos controlar o sub com um nunchuk hackeado Wii. Você não será capaz de navegar
através de vídeo, pois o envio de um sinal de vídeo através de um cabo para um monitor externo é ligeiramente para além do
âmbito do presente
livro, mas contanto que você não vá muito profundo, você deve ser capaz de seguir o sub com uma balsa ou barco pequeno e
direta
-lo a partir da superfície. Mais uma vez, para manter o projeto no âmbito de um único cCapítulo de livro, nós estamos indo para
evitar profundidade
controlar bem; em vez disso, vamos fazer o sub flutuabilidade neutra.
PRECAUÇÕES no caso de você fritar seu PI
Esta compilação envolve tanto profunda água e sistema eletrônico de duas coisas que caminham juntas
historicamente tão bem quanto
água e gatos. Há uma muito boa chance de fritar seu Pi e / ou seus bits associados se o recinto de criar
não é completamente estanque. Com isso em mente, você deve fazer um ou ambos dos seguintes procedimentos:
• Compre um Pi extra para usar em seu submersível. É relativamente barato, e deve acontecer de você
fritá-lo, você ainda vai ter o seu Pi original com todos os seus ajustes e módulos adicionais. Se você duplicar
o seu cartão SD (consulte o próximo ponto) o Pi submersível será exatamente como seu um regular.
• Faça backup do cartão SD regularmente, assim como fazer com o disco rígido do seu computador. Se você fizer
backup como você
ir, você não vai perder muito trabalho duro se algo acontecer com o cartão.

Capítulo 12 ■ O submersível
A Lista de Compras de Peças
Para esta compilação, você vai precisar do seguinte:

Raspberry Pi

Raspberry Pi câmera kit-disponível a partir de Adafruit, Amazon, e Sparkfun

1 Edimax USB dongle wireless EW7811UN

Motor Motorista-dual L298 H-ponte (http://www.sparkfun.com/products/9670)

Nintendo Wii Nunchuk

1 adaptador Wiichuck (http://www.sparkfun.com/products/9281)

Cabeçalhos

2 motores de corrente contínua

Hélices modelo

2 baterias (os pacotes de bateria de lítio-polímero utilizado por amadores RC são uma boa escolha)

1 à prova de água-gabinete pensar Tupperware ou algo semelhante

1 tubo de 5200 marinho impermeabilização vedante

PVC para tubos e cotovelo

Zip variados laços

O fio de galinha ou malha de plástico / compensação

Fio-vermelho e preto, de calibre 18

Ethernet cabo de 25 pés (comprá-lo em grandes quantidades, se possível, como você não vai precisar dos terminais de plástico,
apenas o cabo)

Cera

Calafetar
Acessando pinos GPIO do Raspberry Pi
Uma das características que torna o Raspberry Pi tão incrivelmente útil é sua GPIO (General Purpose Input / Output) pinos.
Usando um módulo Python específico que vem pré-instalado no Pi, os pinos GPIO pode ser controlado diretamente, enviando
Tensões para dispositivos externos de leitura e entradas, que podem então ser utilizados nos programas.
GPIO: QUAL É O GRANDE COISA?
GPIO pinos são como algumas das portas em um computador antigo. Uma maneira fácil de interagir com o mundo
externo usado
para ser o porta serial ou a porta da impressora (paralela). Ambos podem ser acessados com a programação correta
bibliotecas, enviando sinais diretamente para cada pino. Mas como a tecnologia progrediu, ambas as portas
desapareceram e foram
substituído com conectividade USB e Ethernet. Como resultado, tornou-se muito mais difícil de controlar dispositivos
externos
do ponto de vista de programação, e é por isso que muitas pessoas estão animados com as possibilidades
oferecidas pelo Pi de
Pins GPIO.
Capítulo 12 ■ O submersível
Para configurar o Pi para acessar os pinos GPIO programaticamente, você pode precisar instalar o correto desenvolvimento
kit e ferramentas. Basta digitar
sudo apt-get install python-dev
e quando isso acaba, tipo
sudo apt-get install python.rpi-GPIO
■ Nota python-rpi.gpio já pode ser instalado, dependendo da sua versão Raspian. Dependendo da data em que você
está
a leitura deste cCapítulo, ele também pode retornar um erro de "Não é possível localizar pacote." Não é grande
coisa, é mais provável já instalado.
Agora você está pronto para acessar os pinos. O módulo Python usado para acessá-los é o módulo RPi.GPIO.
Ele é normalmente chamado nas primeiras linhas de seu programa digitando
importação RPi.GPIO como GPIO
e, em seguida, configurado digitando
GPIO.setmode (GPIO.BOARD)
que permite identificar os pinos de como eles são rotulados em um diagrama de pinagem padrão, como mostrado na Figura 12-1.
Figura 12-1. O diagrama de pinagem GPIO

Capítulo 12 ■ O submersível
■ Nota Tenha em mente que com GPIO.setmode (GPIO.BOARD), quando você se referir ao pino 11, na verdade você
está se referindo a
o pino físico # 11 (que se traduz em GPIO17 no diagrama na Figura 12-1), não GPIO11, o que se traduz em
pin física # 23.
Depois de definir o modo, você pode então definir cada pino para ser uma entrada ou uma saída. Os usuários do Arduino vai
provavelmente reconhecem o conceito aqui. Digite o seguinte
GPIO.setup (11, GPIO.OUT)
GPIO.setup (13, GPIO.IN)
e assim por diante. Depois de definir um pino como uma saída, você pode então enviar tensão para ele (ligá-lo), digitando
GPIO.output (11, 1)
ou
GPIO.output (11, True)
e, posteriormente, desligá-lo digitando
GPIO.output (11, 0)
ou
GPIO.output (11, False)
Se o pino foi configurado como uma entrada, você pode consultar o pino para ver se um botão ou interruptor ligado a ele
foi pressionado. No entanto, uma importante advertência aqui é que se o pino é apenas declarada uma entrada, ele é definido
como
"Flutuante" e não tem qualquer nível de tensão definida. Neste caso, é preciso conectar o pino de um terreno para que ele seja
sempre
LOW (0) até que pressionar um botão. Isso é feito colocando um resistor entre o pino e um terreno comum. Felizmente,
o módulo RPi.GPIO nos permite fazer isso em software, digitando o seguinte:
GPIO.setup (11, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
Neste ponto, você pode "poll" o pino, a qualquer momento, digitando
Se GPIO.input (11):
print "Input foi HIGH"
outro:
print "Input foi LOW"
Insira este simples pedaço de código em um loop no seu script; cada vez que o loop é executado, o script irá verificar o pino de
Status. Vamos usar essa funcionalidade no nosso programa submersível final para acionar a câmera para tirar fotos.

Instalando o Raspberry Pi Camera Board


O submersível vamos construir serão equipados para tirar fotos, tanto em intervalos predefinidos ou com o pressionar de um
botão.
Obviamente, isso significa que precisamos instalar o módulo da câmera que faz a interface com o Pi.
Capítulo 12 ■ O submersível
Quando você começa a placa da câmera, ele provavelmente irá vêm em uma caixa branca simples, dentro do qual é um cinza anti-
estática
saco que contém a placa da câmera. Certifique-se de que você tenha descarregado toda a eletricidade estática do seu corpo
(porque o
câmera é muito sensível à estática) tocando em uma boa terra, e, em seguida, retire a câmera do saco.
A câmera se conecta ao conector tira localizada na placa entre a saída HDMI e Ethernet
porta. Abra o conector puxando para cima nos lados-it'll "pop" por alguns milímetros, o que é tudo que você precisa.
Posicione o fim do cabo de fita da câmera de modo que os conectores (o lado prata, não o lado azul) estão enfrentando o
Porta HDMI. Deslize a cabo dentro do conector até que encoste para se certificar de que você tem uma boa conexão. Depois,
enquanto segura o cabo ainda, pressionar para baixo em ambos os lados do conector até que eles se encaixem no lugar. (Veja a
Figura 12-2.)
Figura 12-2. Conexão do cabo da câmera do Pi
Você deve ter habilitado o apoio da câmara quando você configurar sua Pi no cCapítulo 3; se você não fez, no entanto, não é
difícil. A partir do terminal, digite
sudo apt-get update
e
sudo apt-get atualização
para se certificar de sua Pi está executando todas as correções mais recentes do kernel e atualizações de software. Quando ambos
os acabamento, tipo
sudo Raspi-config
para iniciar o programa de configuração. Navegue para a seleção "câmera" e clique em "Ativar". Em seguida, selecione "Finish" e
reinicie o Pi.
Capítulo 12 ■ O submersível
Quando o Pi volta para cima, você pode usar a sua built-in funções da câmera, raspistill e raspivid, para experimentar
com a câmara. Para obter uma lista completa de comandos, basta digitar
raspivid
ou
raspistill
no prompt de comando para obter instruções. Por exemplo, para tirar uma fotografia num formato de "cartoon", basta digitar
raspistill -o image.jpg -ifx desenhos animados
ea imagem será salva em qualquer diretório acontecer de você estar dentro. Você pode alterar a resolução da imagem, altura,
largura, efeitos e atraso, e até mesmo configurar uma situação de lapso de tempo usando a bandeira -tl (que nós podemos usar
mais tarde).
Controlar o Sub
Para controlar o sub, vamos usar dois motores DC, um chip controlador de motor (já colocado num circuito impresso
placa), e um Nunchuk Wii (como mostrado na Figura 12-3). Usando um adaptador especial, você pode acessar os fios da nunchuk
e
ligá-los directamente para o Pi framboesa sem ter de cortar o conector a partir da extremidade do controlador.
Figura 12-3. O Wii nunchuk
Capítulo 12 ■ O submersível
O nunchuk comunica através de um protocolo conhecido como I2C, ou IIC, que significa Circuito Inter-Integrated.
Se você está trabalhando o seu caminho através dos projectos em ordem, você pode se lembrar o protocolo I2C do Capítulo 6,
"A Estação de tempo." I2C foi criado pela Philips no início de 1980 como uma forma para diferentes dispositivos para se
comunicar
em um único ônibus (fio de comunicação). Desde então tem sofrido várias revisões, mas o conceito básico continua a ser o
mesmo. Num barramento I2C, uma máquina serve como um "mestre", e pode ser conectado a uma variedade de diferentes
"escravos". Cada
máquina pode comunicar com o mesmo conjunto de fios, usando um sinal de relógio transmitida pelo mestre para sincronizar o
comunicação. Felizmente, para os nossos propósitos, o Raspberry Pi pode utilizar o protocolo I2C sobre alguns dos seus pinos
GPIO,
e a comunicação é relativamente simples, porque existem apenas dois dispositivos de comunicação: a Pi, servindo como o
mestre, e ao Wii nunchuk como o escravo solitário.
Anexando o Adaptador Wiichuck
A primeira coisa a fazer é soldar um conjunto de quatro cabeçalhos para seu adaptador Wiichuck. Usando apenas uma pequena
quantidade de solda,
ligar os cabeçalhos para o adaptador (como mostrado na Figura 12-4). Como muitas placas disponíveis comercialmente, o
adaptador
é coberto com um revestimento de solda-fóbica, o que impede o fluxo de solda e o curto-circuito entre as conexões
los para fora. Isso faz com que os cabeçalhos de solda para o conector de um processo simples, mesmo para soldadores
inexperientes.
Figura 12-4. Cabeçalhos soldadas ao adaptador Wiichuck
Você vai fazer quatro ligações para o,, SDA (a linha de dados I2C) negativo Wiichuck-positivo, e SCL (o relógio I2C
linha). Você vai ligar o fio positivo para GPIO pin # 1 e o fio negativo para GPIO pin # 6. Conecte o fio para SDA
pin # 3 e o fio SCL ao pino # 5. Você pode ver o Wiichuk inserido corretamente no controlador na Figura 12-5.

Capítulo 12 ■ O submersível
Figura 12-5. O correto posicionamento do adaptador Wiichuck
■ Cuidado Você deve ligar o nunchuk para o # 1 pino do Pi (3.3V), não o # 2 pinos (que é 5V). A razão é
que nunchuk do Wii é projetado para funcionar em 3.3V, não 5V. Embora ele vai trabalhar com 5V, pode encurtar
severamente a vida
do controlador.
Ativando I2C do Pi
Para usar o controlador com o Pi, nós precisamos de ativar a capacidade de I2C do Pi, o que não é habilitado por padrão.
Para habilitá-lo, você precisa editar o arquivo lista negra-configuração do Pi, que lista os módulos que o Pi não precisa carregar
em
comece. Os módulos são normalmente listados aqui, porque embora eles estão disponíveis, eles não são usados frequentemente.
Abra a
arquivo lista negra configuração digitando
sudo emacs /etc/modprobe.d/raspi-blacklist.conf
Comente as duas últimas linhas para remover o seu estado na lista negra. Quando estiver pronto, o arquivo deve ser semelhante a
este:
# Lista negra spi e i2c por padrão (muitos usuários não precisam deles)
#blacklist spi-bcm2708
#blacklist i2c-bcm2708

Capítulo 12 ■ O submersível
Salve o arquivo e saia. Você também deve adicionar os drivers de I2C para o kernel. Para fazer isso, abra o arquivo / etc /
modules
digitando
emacs sudo / etc / modules
em seguida, digite
i2c-bcm2708
i2c-dev
para o fim do ficheiro. Salvar e sair. Por último, para usar as ferramentas de I2C, você precisará usar o sudo apt-get para adicionar
estes alguns pacotes:
sudo apt-get install I2C-ferramentas
sudo apt-get install python-smbus
Quando esses pacotes são terminar a instalação, reinicie o Pi.
Testando o Nunchuk
Para ver se a configuração funcionou I2C, conecte o nunchuk aos pinos corretos (1, 3, 5 e 6). Comece o seu terminal,
e digite o seguinte:
sudo i2cdetect -y 0

Esta consulta o barramento I2C para o endereço de todos os dispositivos conectados. Você deverá receber uma resposta como
esta:

0
1
2
3
4
5
6
7
8
9 abcdef
00:
03 04 05 06 07 - - - - - - - -
10: - - - - - - - - - - - - - - - -
20: - - - - - - - - - - - - - - - -
30: - - - - - - - - - - - - - - - -
40: - - - - - - - - - - - - - - - -
50: - - 52 - - - - - - - - - - - - -
60: - - - - - - - - - - - - - - - -
70: - - - - - - - -
Isso mostra que o nunchuk está conectado no endereço # 52.
Se você não vê nada, e você está certo de ter ligado os fios nunchuk corretamente, tente executar
sudo i2cdetect -y 1
ao invés. O "1" ou "0" depende de qual modelo você tem Pi. Embora seja mais provável que o conselho você tem utiliza o
"0", tente o "1" se você está tendo nenhuma sorte de ler o ônibus.
■ Dica Se você tiver problemas para obter resultados, e você é positivo que você ligado todos os fios e dispositivos
corretamente, cheque
que todos os seus fios estão intactos. Perdi horas e horas de solução de problemas uma compilação, apenas para
descobrir que um ou mais dos barato
fios de ligação que eu estava usando foi quebrado dentro do isolamento, ou seja, eu não estava recebendo sinais de
onde eu era suposto.
Isso acontece com mais freqüência do que você pensa!

Capítulo 12 ■ O submersível
Leitura desde o Nunchuk
Agora você está pronto para ler a partir do nunchuk. Eventualmente, é claro, nós estamos indo para traduzir os sinais do nunchuk
em comandos para os motores, mas pode ser instrutivo para ver o que os sinais que estamos recebendo para começar. Para fazer
isso,
vamos criar um script Python que importa os módulos corretos, ouve a sinais provenientes do nunchuk, e emite-os a
a tela. Há sete sinais enviados sobre o fio: o X e Y-posição do joystick, o estado do "Z" e "C"
botões na frente, e o X, Y, e Z estado de acelerômetro embutido do nunchuk. Nós não vamos usar tudo isso para
o sub, mas ainda podemos dar uma olhada neles.
Aqui está o script completo para que você digite:
#import módulos necessários
smbus importação
tempo de importação
ônibus = smbus.SMBus (0)
# Ou smbus.SMBus (1), se você tinha que usar -y 1 no comando i2cdetect
comunicação I2C #initiate por escrito para o nunchuk
bus.write_byte_data (0x52,0x40,0x00)
time.sleep (0,1)
while True:
experimentar:
bus.write_byte (0x52,0x00)
time.sleep (0,1)
DATA0 = bus.read_byte (0x52)
data1 = bus.read_byte (0x52)
data2 = bus.read_byte (0x52)
data3 = bus.read_byte (0x52)
data4 = bus.read_byte (0x52)
dados5 = bus.read_byte (0x52)
joy_x = DATA0
joy_y = dados1
accel_x = (data2 << 2) + ((dados5 & 0x0c) 2 >>)
accel_y = (data3 << 2) + ((dados5 & 0x30) >> 4)
accel_z = (data4 << 2) + ((dados5 & 0xC0) >> 6)
botões = dados5 & 0x03
button_c = (botões == 1) #button_c é Verdadeiro se botões = 1
button_z = (botões == 2) #button_z é Verdadeiro se botões = 2
print 'Jx:% s Jy:% s Ax:% s Ay:% s Az:% s Bc:% s Bz:% s'% (joy_x, joy_y, accel_x, accel_y,
accel_z, button_c, button_z)
exceto IOError como e:
impressão e
Se você não tiver, crie uma pasta para o seu programa submersível, salve esse script em que pasta, e executá-lo.
Depois de importar os módulos necessários, o script cria um "bus" sobre o qual todas as comunicações serão feitas com
o nunchuk. Em seguida, ele começa a comunicação por escrito ao endereço I2C do nunchuk (bus.write_byte_data ()). É então
introduz um ciclo onde se lê continuamente as cordas 5-byte proveniente do Nunchuk (DATA0, dados 1, e assim por diante) e
categoriza-os como direções do joystick, leituras do acelerômetro, e pressiona o botão, nessa ordem. Em seguida, ele imprime os
valores para a tela e repete o processo.

Capítulo 12 ■ O submersível
Porque envolve a leitura ea escrita para o barramento I2C, você vai ter que executá-lo como root, então digite o seguinte:
sudo python nunchuktest.py
Assim que inicia o script, ele irá mostrar-lhe um relatório sobre o estado de execução de todos os sensores do Nunchuk,
atualizado em tempo real
tempo e formatados assim:
JX: 130 Jy: 131 Ax: 519 Ay: 558 Az: 713 Bc: Falso Bz: Falso
Com o script em execução, tente mover o joystick, pressionando os botões, e agitando o nunchuk para assistir a
valores mudam. Você já sabe como ler valores do nunchuk, que vamos usar para acionar os motores.

O Projeto Nunchuk e LED Teste Side


Como um projeto paralelo pouco (e como um teste para a minha capacidade nunchuk-leitura), me juntei seis LEDs para uma
pequena placa de ensaio e
alguns pinos GPIO para que eles pudessem acender dependendo da maneira que eu movi o joystick ou pressionado os botões. este
pode ser um teste útil para conduzir para se certificar de que não só você está lendo os valores, mas que você é capaz de
fazer algo com esses valores. Neste caso, escolha quatro pinos GPIO e defini-las como saídas. Conecte os pinos para uma
resistência e a perna positiva dos seus LEDs ligados em paralelo (como se mostra na Figura 12-6), amarrar todos os motivos em
conjunto,
e execute o seguinte script:
smbus importação
tempo de importação
importação RPi.GPIO como GPIO
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
pins #set
GPIO.setup (11, GPIO.OUT)
GPIO.setup (13, GPIO.OUT)
GPIO.setup (15, GPIO.OUT)
GPIO.setup (19, GPIO.OUT)
GPIO.setup (21, GPIO.OUT)
GPIO.setup (23, GPIO.OUT)
ônibus = smbus.SMBus (0)
bus.write_byte_data (0x52, 0x40, 0x00)
time.sleep (0,1)
while True:
experimentar:
bus.write_byte (0x52, 0x00)
time.sleep (0,1)
DATA0 = bus.read_byte (0x52)
data1 = bus.read_byte (0x52)
data2 = bus.read_byte (0x52)
data3 = bus.read_byte (0x52)
data4 = bus.read_byte (0x52)
dados5 = bus.read_byte (0x52)
joy_x = DATA0
joy_y = dados1

Capítulo 12 ■ O submersível
# As seguintes linhas adicionar os valores necessários para fazer a receberam 5-byte
# Cordas mais fácil de descodificar e impressão
accel_x = (data2 << 2) + ((dados5 & 0x0c) 2 >>)
accel_y = (data3 << 2) + ((dados5 & 0x30) >> 4)
accel_z = (data4 << 2) + ((dados5 & 0xC0) >> 6)
botões = dados5 & 0x03
button_c = (botões == 1)
button_z = (botões == 2)
imprimir 'Jx:% s Jy:% s Ax:% s Ay:% s Az:% s Bc:% s Bz:
%s'
%
(joy_x, joy_y, accel_x, accel_y, accel_z, button_c, button_z)
Se joy_x> 200:
GPIO.output (11, 1)
GPIO.output (13, 0)
GPIO.output (15, 0)
GPIO.output (19, 0)
GPIO.output (21, 0)
GPIO.output (23, 0)
elif joy_x <35:
GPIO.output (11, 0)
GPIO.output (13, 1)
GPIO.output (15, 0)
GPIO.output (19, 0)
GPIO.output (21, 0)
GPIO.output (23, 0)
elif joy_y> 200:
GPIO.output (11, 0)
GPIO.output (13, 0)
GPIO.output (15, 1)
GPIO.output (19, 0)
GPIO.output (21, 0)
GPIO.output (23, 0)
elif joy_y <35:
GPIO.output (11, 0)
GPIO.output (13, 0)
GPIO.output (15, 0)
GPIO.output (19, 1)
GPIO.output (21, 0)
GPIO.output (23, 0)
elif button_c == True:
GPIO.output (11, 0)
GPIO.output (13, 0)
GPIO.output (15, 0)
GPIO.output (19, 0)
GPIO.output (21, 1)
GPIO.output (23, 0)
elif button_z == True:
GPIO.output (11, 0)
GPIO.output (13, 0)
GPIO.output (15, 0)
GPIO.output (19, 0)
GPIO.output (21, 0)
GPIO.output (23, 1)

Capítulo 12 ■ O submersível
outro:
GPIO.output (11, 0)
GPIO.output (13, 0)
GPIO.output (15, 0)
GPIO.output (19, 0)
GPIO.output (21, 0)
GPIO.output (23, 0)
exceto IOError como e:
impressão e
Figura 12-6. Configuração de teste LED
Como mencionado anteriormente, o código primeiro cria um "bus" sobre o qual todas as comunicações serão feitas com o
nunchuk. Em seguida, ele começa a comunicação por escrito ao endereço I2C do nunchuk (bus.write_byte_data ()). É então
introduz um ciclo onde se lê continuamente as cordas 5-byte proveniente do Nunchuk (DATA0, dados 1, e assim por diante)
e classifica-los como direções do joystick, leituras do acelerômetro, e pressiona o botão, nessa ordem. O valor que
dessas cordas indicar o que cada componente do nunchuk está fazendo: se Buttonz é verdadeiro, por exemplo, o botão
foi pressionado. Da mesma forma, o valor de Y-direção do joystick indica se o joystick está sendo empurrado para a frente
ou puxado para trás. A longa sequência de declarações if-elif simplesmente percorre os valores recebidos e acende o
LED correspondente.
Executá-lo (novamente, usando sudo) deve resultar em diferentes LEDs de iluminação, dependendo do que você está fazendo
com
o nunchuk.
Como você pode ver, enganchando os LEDs em paralelo significa que todos eles compartilham um terreno comum, e uma comum
de alta
linha de tensão. Em contraste, se você fosse para conectá-los em série, a perna positiva de cada LED iria ligar para o negativo
perna do lado de LED, com uma resistência de entre o último LED e quer o pino positivo ou negativo da Pi.
Controlar os Motors Sub Câmara e com o Nunchuk
Agora que você tem o trabalho nunchuk, precisamos usá-lo para controlar os motores do sub, que envolve o uso do
L298 chip controlador do motor. Normalmente, não podemos dirigir motores muito potentes ou servos com o Pi, porque o Pi não
pode
fonte (oferta) corrente suficiente para conduzi-los. Para contornar esta limitação, usamos um chip controlador do motor, tal como
a L298. Chips como esse, chamados pontes H, permitem-lhe ligar uma fonte de alimentação externa para os seus motores e
utilizar o Pi

Capítulo 12 ■ O submersível
para ligar os motores e desligar conforme necessário. Os custos L298 chip de apenas alguns dólares e pode ser usado para
conduzir incrível
quantidades de corrente e tensão-até 4 amperes e 46 volts. É comumente usado com robôs passatempo e é perfeito para
este tipo de aplicação.
No entanto, embora o chip é barato, conectá-lo ao Pi e os motores podem ser complicado porque você precisa
a utilização de vários capacitores de 10nF e alguns diodos flyback para proteger o Pi de picos de tensão provenientes dos motores.
Por essa razão, eu recomendo começar a bordo motorista L298 motor do Sparkfun, como mencionado no
"A Lista de Compras de Peças" seção. Ele faz as conexões muito mais simples: você conecta a fonte externa, os sinais de entrada
do Pi, e fios de saída para os motores, e está feito. Para o resto do cCapítulo, eu estou indo supor que você é
usando a placa Sparkfun. Se você decidir breadboard o chip mesmo, alguns bons esquemas podem ser encontrados online.
Para controlar o sub e os motores, podemos modificar o script de condução LED apresentei anteriormente na seção
"O Nunchuk e LED de teste", mas em vez de virar LEDs dentro e fora, nós vamos girar motores dentro e fora, e
activar a câmara. Controle será basicamente da seguinte forma:
• Joystick para a frente = ambos os motores de giro
• Joystick para a esquerda = motor girando à direita
• direito Joystick = motor girando esquerda
• botão C pressionado = tirar o retrato com câmera
• botão Z = pressionadas ter vídeo com câmera
Para alimentar os motores com a placa L298, sete fios ligar o Pi à placa-três para cada conectado
do motor, e o chão. Motor A é controlada com IN1, IN2, e ENA ("enable A"). Motor B é controlado com IN3, IN4,
e ENB. Para controlar o motor A, você define ENA a alta, e em seguida, enviar para baixo tensões quer IN1 ou IN2 (ou nenhum,
para frear
o motor). Motor B é controlado da mesma maneira. O fornecimento de energia para os motores é conectado à placa, ignorando
a Pi inteiramente. Para ver uma ilustração, dê uma olhada na tabela 12-1 e Figura 12-7.
Tabela 12-1. Valores e configurações de motor
Valor ENA ENA = 1
ENA = 1
ENA = 1
ENA = 0
IN1 Valor
IN1 = 1
IN1 = 0
IN1 = 0
-
IN2 Valor
IN2 = 0
IN2 = 1
IN2 = 0
-
Resultado
A Motor gira rotações do motor A
Travões de um motor paradas do motor A
no sentido horário
sentido anti-horário

Capítulo 12 ■ O submersível
Figura 12-7. Motors eo controlador do motor ligado ao Pi
Obviamente, tudo o que precisamos fazer é criar três pinos GPIO para cada motor. Ao mesmo tempo, lemos os pinos GPIO
definido
como entradas I2C, e definir os pinos do motor alta ou baixa, dependendo dos sinais que estamos recebendo do nunchuk. Bem,
também
verificar se há botões pressionados, a fim de ativar a câmera. (Figura 12-7 mostra as conexões para um motor, não ambos.)
Não há bibliotecas Python ainda disponíveis para interface direta com módulo de câmera do Pi. No entanto, não temais;
podemos usar o módulo subprocesso do Python para fazer comandos do sistema como se estivéssemos na linha de comando. Se
você quisesse
para tirar uma fotografia usando a câmera de dentro de um script Python, você deve digitar
de subprocess chamada de importação
ligar para (["raspistill -o image.jpg"], shell = True)
O comando de vídeo é quase o mesmo:
de subprocess chamada de importação
ligar para (["raspivid -o video.mp4"], shell = True)
Podemos definir cada comando dentro de sua própria função e chamar essa função quando o botão apropriado é pressionado
sobre o nunchuk. Da mesma forma, podemos configurar as funções para executar os motores e chamar essas funções de acordo
com a posição
do joystick. Tudo isso acontece dentro de um loop while e continua até que nós matamos o programa ou as baterias morrer.
Iniciando o Programa remotamente
Existem várias maneiras de obter o programa Python em execução uma vez que você ligar o seu submersível, como você não terá
um teclado, mouse ou monitor conectado ao Pi. Parece que a maneira mais fácil seria a criação de um IP estático
endereço, efetuar login remotamente em o Pi a partir de um laptop, e, em seguida, iniciar o programa a partir daí. No entanto, isto
só irá funcionar se
você estiver conectado a uma rede sem fio, e as chances são de que não haverá quaisquer redes disponíveis fora no meio
de um lago (ou oceano, ou onde quer que acontecer de você estar usando o seu submersível).
Você pode configurar um ad hoc de rede, que é onde o Pi e seu laptop criar uma rede pequena, exclusivo, e
em seguida, faça o login para o Pi a partir do seu laptop. No entanto, a criação de uma rede ad hoc pode ser problemático, e se
isso não acontecer
funcionar por algum motivo, você será incapaz de acessar sua Pi, tornando o seu submersível inútil.

Capítulo 12 ■ O submersível
Depois de alguma reflexão, eu decidi que a melhor maneira de proceder seria a de simplesmente iniciar o programa de sub
controle
automaticamente, quando você iniciar o Pi. Dessa forma, você pode ligá-lo, enviar energia para os motores, e prossiga para
trabalhar
com o seu sub.
Para fazer isso, tudo o que precisamos fazer é editar um arquivo-o planejador Cron. O planejador Cron é um agendador de tarefas
você
pode editar. Ele permite que você agende tarefas e scripts em horários e intervalos especificados. Para editá-lo, você abre o
arquivo chamado
o crontab, digitando
sudo crontab -e
Cada usuário tem sua própria crontab, mas usando sudo estaremos editando Cron do usuário root, que é o usuário que precisamos
para executar o nosso script Python. Você verá algo como a Figura 12-8.
Figura 12-8. Arquivo crontab do usuário
Desça até a final do arquivo, e digite o seguinte:
reboot python /home/pi/Desktop/submersible/sub.py &
Este é o caminho específico para o seu script Python (supondo que você salvou sub.py na pasta "submersível" na
sua área de trabalho), ea "&" diz Cron para executar o trabalho em segundo plano, de modo a não interferir com a inicialização
normal
rotina. Salve o arquivo, digitando Ctrl + X, Y e pressione Return. A próxima vez que você reiniciar o Pi, sub.py será
correndo testar-lo se você gosta!

Capítulo 12 ■ O submersível
O Programa de Controle de final
Temos agora todas as diferentes peças Python programado; tudo o que resta é para combiná-los em um script. Temos
determinou os parâmetros de movimento, então vamos escrever algumas funções que serão chamadas a partir do circuito principal
do programa
para reagir aos movimentos do joystick e botões pressionados. O mais fácil será as funções da câmera. Para tirar uma foto
estática, tipo
def takeStillPic (picNum):
"Tome imagem estática quando o botão é pressionado C"
ligar para (["raspistill -o imagem" + str (picNum) + ".jpg"], shell = True)
E para um vídeo, digite:
def takeVideo ():
"Tome vídeo quando o botão é pressionado Z"
ligar para (["raspivid -o video.mp4"], shell = True)
A primeira função, takeStillPic (picNum), tira uma foto, usando a chamada de sistema raspistill, com o nome de
o parâmetro, picNum. A segunda função, takeVideo (), leva a um vídeo com a extensão .mp4, usando o raspivid
chamada de sistema.
Nós vamos fazer uma chamada de importação subprocess no início do programa, com todos os nossos outras importações. É uma
boa
prática de programação para importar todos os seus módulos quando você iniciar o programa, mesmo que seja tecnicamente
possível importar um módulo necessários em qualquer parte do script. Mantendo suas importações em um lugar pode torná-lo
mais fácil
depurar o script mais tarde. Você também vai notar que takeStillPic leva um inteiro como um parâmetro; se mantivermos um
contador de
cada vez que pressione o botão C e enviar essa contagem para a função, nós vamos obter um nome de imagem diferente
("image4.jpg
,
"Image5.jpg", e assim por diante) cada vez que pressionar o botão. Se não fizermos isso, cada vez que chamar a função que vai
criar outro "image.jpg", substituindo a imagem anterior do mesmo nome. Além disso, observe que o parâmetro precisa
ser moldado como uma string com str (), a fim de ser inserido na seqüência de nome de arquivo dado.
Para manter as coisas simples, nós não estamos indo para usar recursos de vídeo da câmera neste programa. Em vez disso,
podemos tomar
uma foto com o botão nunchuk, espere até que o processo for concluído câmera, e, em seguida, continuar com o programa de
loop principal até que o botão é pressionado novamente.

O código final
Salve o seguinte código no seu Pi, de preferência em sua própria pasta. Também está disponível como sub.py no site da Apress.
de subprocess chamada de importação
tempo de importação
smbus importação
importação RPi.GPIO como GPIO
GPIO.setwarnings (False)
GPIO.setmode (GPIO.BOARD)
take_stillpic def (num):
ligue para (["raspistill -o imagem" + str (num) + "jpg"], shell = True)
go_forward def ():
GPIO.output (19, 1) # IN1 sobre
GPIO.output (23, 0) # IN2 off
GPIO.output (11, 1) # IN3 em
GPIO.output (15, 0) # IN4 off

CCapítulo 12 ■ O submersível
go_backward def ():
GPIO.output (19, 0) # IN1 off
GPIO.output (23, 1) # IN2 sobre
GPIO.output (11, 0) # IN3 off
GPIO.output (15, 1) # IN4 sobre
go_right def ():
GPIO.output (19, 1) # IN1 sobre
GPIO.output (23, 0) # IN2 off
GPIO.output (11, 0) # IN3 off
GPIO.output (15, 1) # IN4 sobre
go_left def ():
GPIO.output (19, 0) # IN1 off
GPIO.output (23, 1) # IN2 sobre
GPIO.output (11, 1) # IN3 em
GPIO.output (15, 0) # IN4 off
#set pinos de controle do motor
do motor #left
# 11 = IN3
# 13 = enableB
# 15 = IN4
GPIO.setup (11, GPIO.OUT)
GPIO.setup (13, GPIO.OUT)
GPIO.setup (15, GPIO.OUT)
do motor #right
# 19 = IN1
# 21 = enableA
# 23 = IN2
GPIO.setup (19, GPIO.OUT)
GPIO.setup (21, GPIO.OUT)
GPIO.setup (23, GPIO.OUT)
#enable ambos os motores
GPIO.output (13, 1)
GPIO.output (21, 1)
#setup ler nunchuk
ônibus = smbus.SMBus (0)
# Ou um y (1) Se você precisava usado -1 no comando i2cdetect
bus.write_byte_data (0x52, 0x40, 0x00)
time.sleep (0,5)
x=1
while True:
experimentar:
bus.write_byte (0x52, 0x00)
time.sleep (0,1)
DATA0 = bus.read_byte (0x52)

Capítulo 12 ■ O submersível
data1 = bus.read_byte (0x52)
data2 = bus.read_byte (0x52)
data3 = bus.read_byte (0x52)
data4 = bus.read_byte (0x52)
dados5 = bus.read_byte (0x52)
joy_x = DATA0
joy_y = dados1
accel_x = (data2 << 2) + ((dados5 & 0x0c) 2 >>)
accel_y = (data3 << 2) + ((dados5 & 0x30) >> 4)
accel_z = (data4 << 2) + ((dados5 & 0xC0) >> 6)
botões = dados5 & 0x03
button_c = (botões == 1) ou (botões == 2)
button_z = (botões == 0) ou (botões == 2)
se joy_x> 200: direito #joystick
Vire a direita()
elif joy_x <35: #joystick esquerda
vire à esquerda()
elif joy_y> 200: #joystick frente
ir para a frente()
elif joy_y <35: #joystick volta
go_backward ()
elif button_c == True:
X=x+1
take_stillpic (x)
elif button_z == True:
print "botão z! \ n"
else: #joystick em neutros, sem botões
GPIO.output (19, 0)
GPIO.output (23, 0)
GPIO.output (11, 0)
GPIO.output (15, 0)
exceto IOError como e:
impressão e
Construindo o Sub
Neste ponto, estamos prontos para começar a construir o submersível real. Reúna suas peças em conjunto: os tubos de PVC e
cotovelos, recipiente à prova d'água, colas, parafusos, e o resto. Lembre-se que o projeto que eu ilustrar da seguinte
seções é apenas isso: uma ilustração, não uma folha de instruções passo-a-passo. Contanto que você acabar com um quadro de
algum
ordenação, sobre a qual você pode montar o seu gabinete Pi impermeabilizada e impermeabilizadas motores e hélices, você vai
tiveram sucesso nesta tarefa.
Capítulo 12 ■ O submersível
■ ■ Nota planos de construção, em particular os procedimentos a motor de impermeabilização foram influenciados
fortemente pelo
Programa seaperch (http://www.seaperch.org), um programa projetado para ensinar os alunos de todas as idades
sobre a construção de uma
submersível controlado remotamente e que incentiva o envolvimento nos campos de engenharia e matemáticas. É
um valioso
programa, e eu altamente endossar seus objetivos.
Construindo o quadro
Usando o tubo de PVC e 90 ° cotovelos, construir um quadro mais ou menos quadrado grande o suficiente para manter seu
gabinete de Pi. Após
usando cola de PVC ou parafusos para fixar tudo no lugar, cortar a rede plástica para ajustar a praça e usar os laços zip para
prendê-lo ao quadro. Você deve acabar com uma "bandeja" de plástico, como o mostrado na Figura 12-9.
Figura 12-9. O sub plataforma
Este é o corpo do seu sub. Eu deixei-o suficientemente grande para adicionar tiras de isopor sobre os lados se eu precisar mudar o
flutuabilidade, embora eu não deveria ter que, vendo como do gabinete do Pi é preenchido com ar.
Criação do gabinete do Pi
Você precisa de uma clara recipiente de plástico grande para conter todos os seus eletrônicos. Eu especificar "clara" porque sua
câmera será
olhando através dela e precisa ser capaz de ver. Quando você tiver selecionado o seu recipiente, perfurar três pequenos furos nele
e dois
para os fios para os motores, e um para o fio para o nunchuk-como você vê na figura 12-10.
Capítulo 12 ■ O submersível
Figura 12-10. Recinto Pi Waterproof
Impermeabilização de Caixas de motor
Talvez a parte mais difícil deste projecto é a impermeabilização dos motores, como eles estarão fora do recinto. eu costumava
frascos de comprimidos prescritos para segurar a minha. Primeiro, enrole o motor inteiramente com fita isolante para vedar as
grandes buracos na
invólucro. (Veja a Figura 12-11.)
Figura 12-11. Motor envolto em fita isolante
Capítulo 12 ■ O submersível
Em seguida, tira as extremidades de um curto comprimento do cabo Ethernet e solda dois dos fios fechados para os fios de
o motor. Quando ele está totalmente envolvido e os cabos estão conectados, faça dois furos no frasco de comprimido e um na
tampa
para a hélice, e um na base para os fios de controlo. Deslize os fios através da garrafa e se certificar que tudo
se encaixa perfeitamente na garrafa, como mostrado na Figura 12-12 e a Figura 12-13.
Figura 12-12. Motor pronto para inserir no frasco de comprimido
Figura 12-13. Motor devidamente introduzida na garrafa
Capítulo 12 ■ O submersível
Agora (e aqui está a chave impermeabilização) defender o seu frasco de comprimido na vertical e preenchê-lo com cera, em torno
do motor
e os fios, como mostrado na Figura 12-14. A cera de parafina, disponível no seu supermercado, funciona bem para isso. Você vai
provavelmente tem a melhor sorte se você adicionar uma pequena camada de cera, deixe endurecer, e depois continuar até que a
garrafa está cheia.
Figura 12-14. Motor rodeado por cera
Quando está firmemente cercada por cera, verifique se o eixo do motor ainda pode virar e em seguida, deslize a tampa, cabendo
o eixo do motor através de sua pré-furo. Em seguida, deslize o seu hélice no eixo exposto, e você deve ter
um motor à prova de água que se assemelha a Figura 12-15. Repetir para o outro motor para o outro lado do secundário, e em
seguida
aperte os dois motores a moldura do seu sub com laços zip.
Figura 12-15. Motora impermeabilizado, pronto para montagem
Capítulo 12 ■ O submersível
Conexão do Nunchuck
Desde que nós estamos indo para ser executado cabo Ethernet da sub ao nunchuck (que será mantida a bordo do seu
barco), você vai precisar usar outro comprimento de cabo Ethernet. Tira as extremidades, pegar quatro fios e solda-los para o seu
controlador wiichuck. Deslize a outra extremidade do cabo através do orifício superior no corpo do seu sub, e conecte a outra
termina desses quatro fios para seus pinos GPIO do Pi.
Montagem do produto final
Uma vez que seus motores são à prova d'água, você pode montar o produto final. Executar os fios de cada motor através do
buracos em seu recipiente, e conectá-los à placa do controlador do motor da mesma forma que você fez para o teste. Quando
todos
os fios foram alimentadas através dos orifícios, utilizar o epóxi marinho para vedar os furos.
■ ■ Aviso O 5200 selante é extremamente pegajosa e confusa, e se você obtê-lo em sua pele que não vai sair.
Usar
luvas, e fazer todo o seu trabalho fora, se puder. Além disso, não ser mesquinho com o selante-você está tentando
proteger todo o seu
eletrônica, para se certificar que não há maneira de a água entrar em seu gabinete.
Quando os buracos são fechados, certifique-se de todas as suas conexões eletrônicas são de som e colocar o Pi eo motor
controlador para dentro do gabinete. Use um pequeno pedaço de fita ou um cartaz massa (que é o que eu usei) para pressionar a
câmera
contra o "muro" parte frontal do gabinete, e para manter as várias placas no lugar. Use uma pequena placa de ensaio para se
conectar
seus motivos, e adicionar suas duas baterias: uma para o Pi, e um para o controlador do motor.
Quando você liga o seu Pi com uma bateria, você deve usar uma fonte de 5V porque o Pi não tem um bordo
regulador de voltagem. Você pode experimentar com diferentes combinações de baterias, ou você pode usar um regulador de
tensão para fazer o
trabalhar para você. Para todo o meu trabalho Pi portátil, eu ter cortado um carregador de carro USB, visto na Figura 12-16, para
o efeito,
porque fornece 5V e cerca de 1 ampères perfeitamente.
Figura 12-16. Carregador de carro USB

Capítulo 12 ■ O submersível
Rachar a caixa aberta, e usar um cabo USB para micro-USB para conectar o poder USB para o seu poder de Pi in.
Em seguida, anexar o poder de sua bateria para entradas de alimentação do carregador, e voila! Você tem 5V alimentando o Pi!
Uma vez que você tem seus problemas de energia classificada, você pode colocar tudo no recinto, ligue o Pi, e selo
-lo. Esperançosamente, você tem algo que parece semelhante à da Figura 12-17.
Figura 12-17. Concluído submersível
Obviamente, a versão do produto mostrado na Figura 12-17 está inacabada, eu não ter ligado o nunchuk
Ainda não, mas você pode ver a colocação dos motores e do próprio recinto. Como uma foto final de construção, figura 12-18
mostra a colocação da câmera do Pi contra a parede frontal do gabinete, realizada no local com poster massa de vidraceiro.
Capítulo 12 ■ O submersível
Figura 12-18. Pi posicionamento da câmera em gabinete
Se você seguiu todas as instruções com cuidado, você deve agora ter um submersível Pi-motorizado que você pode
controle de terra ou seu barco, usando um nunchuk Wii. Pressionando o botão no nunchuk vai deixar você tirar fotos,
e você pode transferi-los para seu computador de casa quando você traz o Pi de volta a bordo.
E que tipo de fotografias que pode fazer? Bem, se você mora na Austrália, você poderia tomar algo como você vê na
Figura 12-19.
Capítulo 12 ■ O submersível
Figura 12-19. A fotografia subaquática
(Divulgação completa aqui: esta imagem foi não tomado com uma sub Pi Mas. Poderia ter sido.)
Se, entretanto, você vive no Alasca, as imagens que você começa pode acabar parecendo mais Figura 12-20 e Figura 12-21.
Capítulo 12 ■ O submersível
Figura 12-20. Alasca fotografia subaquática
Figura 12-21. Mais do Alasca fotografia subaquática
Estas foram tiradas em um lago não muito longe da minha casa. Sim, é muito chato, não muito acontecendo em lagos do Alasca
em
final do outono. Eu provavelmente vou tentar novamente na primavera ou no verão.
Aproveite o seu submarino!
Resumo
Neste cCapítulo, você aprendeu sobre como usar o protocolo I2C para conectar um nunchuk Wii para o seu Pi e usá-lo para
controlar alguns
diferentes funções no seu Pi. Você, então, construiu um recinto estanque, móvel para o seu Pi, conectadas alguns motores
e sua câmera, e foram capazes de pilotar remotamente o seu sub e pegue a alguns (espero) impressionantes fotos subaquáticas.
No próximo cCapítulo, você aprenderá como conectar um microcontrolador Arduino-the-à sua Pi para aumentar as suas
capacidades.

Capítulo 13
O Gertboard
Enquanto o Raspberry Pi é uma impressionante peça de hardware, com áudio e interfaces de vídeo, Ethernet, USB, e GPIO
pinos, não é todo-poderoso. Por exemplo, ele não tem um regulador de tensão de bordo, o que torna possível a facilidade
fritar o Pi, dando-lhe muita tensão. Também não tem uma maneira fácil de controlar outros circuitos, tais como motores que
requerem mais corrente do que o Pi pode convenientemente fonte.
Digite o Gertboard. Um add-on placa de circuito, é sobre o tamanho de um cartão de índice e significativamente estende o
funcionalidade do seu Raspberry Pi. Enquanto você definitivamente não precisa de um para trabalhar com o Pi, tendo um marcas
muito mais fácil fazer coisas que você não poderia fazer o contrário. Por exemplo, você pode adicionar mais sensores, motores de
acionamento externo,
e muito, muito mais.
Ele deve a sua existência (e seu nome) para seu criador, Gert Van Loo. Gert foi um dos engenheiros voluntários originais
que doou grandes porções de seu tempo ao projeto Raspberry Pi e ajudou com o projeto que eventualmente se tornou
o modelo B. Raspberry Pi Porque ele queria expandir ainda mais as capacidades do Pi, ele projetou o Gertboard,
que foi o primeiro disponível apenas como um kit; que você teve para soldar a placa junto antes que você poderia usá-lo. No
entanto, você pode
agora comprar uma placa completamente montado a partir de vários varejistas online.
O desenvolvimento continua no Gertboard, então há uma boa chance de que sua placa pode ser diferente daquele em
as imagens neste cCapítulo, mas o posicionamento global de peças e seções não mudou. CIs (circuitos integrados)
podem ser diferentes, mas os cabeçalhos usado para ligar para eles não. Há ainda uma outra versão do chamado Gertboard
Placa Multiface, posto para fora por Tandy. A versão Multiface é concebido com todos através de buracos partes, o que significa
que ele
pode ser vendida como um kit e não requer solda superfície de montagem.
Neste cCapítulo, eu vou te dar um rápido passeio do Gertboard e suas partes, e até mesmo levá-lo através de algumas das
programas disponíveis para você usar. Isto lhe dará uma compreensão de trabalho do que os diferentes componentes do
e mostrar-lhe como fazer a interface com eles e, por sua vez, dar o seu Pi outra interface com o mundo físico.
Examinando o Conselho
O Gertboard é um impressionante PCB (placa de circuito impresso). Ele mede 13,2 por 8,4 cm. (5.1 por 3.3 polegadas, para você
Povos americanos) e cerca de 1,4 cm. (1/2 polegada) de altura quando está sentado em seus suportes de plástico incluído. Esses
apoios são
projetado para permitir que ele "sentar" no topo do Raspberry Pi com seus cabeçalhos GPIO do sexo feminino interface
precisamente com o Pi de
pinos machos (como mostrado na Figura 13-1).
Capítulo 13 ■ O Gertboard
Figura 13-1. A Gertboard ligado ao Pi
A partir de onde ele interage com o Pi, e movendo-se no sentido horário, vamos dar uma pequena turnê em torno da placa de
identificar o que todos esses pinos e botões servem para, não é?
Os pinos GPIO
Como um lembrete rápido, pinos GPIO do Pi (a fila de pinos ao lado do cartão SD no Pi) são a forma mais fácil de permitir que
ele
interagir com o mundo, com pinos de terra, ambos 3.3V e 5V pinos, pinos e variados que podem ser configuradas como
entradas ou saídas para ler interruptores e motores de acionamento, por exemplo. (Veja a Figura 13-2.)
Capítulo 13 ■ O Gertboard
Figura 13-2. Os pinos GPIO
Desde conectar a placa no Pi abrange pinos GPIO do Pi, os pinos, obviamente, precisa ser acessível,
e eles são, como você pode ver na Figura 13-2. Se você olhar atentamente para as numerações pino, você vai perceber que
unicamente o GPIO
pinos estão nessa linha; as 3.3V, 5V e GND estão em outro lugar no conselho.
Atmega Chip
Uma adição interessante (e útil) para o Gertboard é o chip Atmega 328P (mostrado na Figura 13-3) -a mesma
chip usado na maioria dos Arduinos. É um microcontrolador muito útil, e em uma das suas outras encarnações no Arduino
linha de placas (que eu vou falar sobre no CCapítulo 14), ele é usado por muitos, muitos aficionados. Tê-lo disponível em um
facilmente
forma acessível como este é algo que muitos usuários nos fóruns on-line Raspberry Pi tinha sido pedindo.
Capítulo 13 ■ O Gertboard
Figura 13-3. O chip Atmega
Embora o chip Atmega no Gertboard não é bootloaded com o software Arduino, é definitivamente possível
para adicionar o software para o chip. Os pinos circulado na Figura 13-3 são as conexões com o chip Atmega.
A-para-D e D-para-um Conversores
Uma parte importante de qualquer placa como o Gertboard é a conversão analógico-digital e digital-analógico. Os quatro
pinos em destaque na Figura 13-4 e seu IC associada gerenciar essas conversões para nós.
Capítulo 13 ■ O Gertboard
Figura 13-4. Os conversores
Um conversor digital-para-analógico é útil para converter sinais digitais para uma forma utilizada por dispositivos analógicos; por
exemplo,
muitos sinais de áudio modernos são armazenadas como ficheiros digitais MP3 e deve ser convertida para uma forma analógica
de modo a
ser reproduzido pelos alto-falantes. Os sinais de vídeo digitais devem ser convertido a fim de ser reproduzida num monitor
analógico.
Um usuário do Pi empreendedor pode querer saída de seus sinais digitais para um dispositivo analógico, e estes pinos torná-lo
possível.
Por outro lado, analógico-para-digital de conversão também é muito útil quando a interface de um computador digital para uma
mundo analógico, e o conversor no Gertboard pode ser usada para isso também. Por exemplo, você pode querer ler o
valores de um sensor de pressão analógico ligado a uma linha de pressão hidráulica. Esses valores são os valores analógicos, mas
o Pi de
GPIO pinos ler entrada somente digital. Você deve usar um chip para converter esses valores analógicos para um BAIXO ALTO
ou Digital
de modo que o Pi pode compreendê-los.
I Secção / O
A secção I / O do conselho sejam totalmente utilizadas para entradas e saídas em buffer, incluindo interruptores, botões e LEDs.
(Ver Figura 13-5). Em adição para a linha superior de cabeçalhos, que é constituída por uma fileira de 12 pequenas, LEDs
montados em superfície, três
botões de seleção, e três chips SN74HC244N. Esses chips são buffers, e eles são usados para evitar danos
à sua Pi das coisas estranhas que você provavelmente vai ser ligar para os pinos. Há resistores em série no lugar
para proteger o processador do Pi se você por engano programar o GPIO como uma saída, mas deixar a ponte de entrada em
vigor.
Da mesma forma, o envio de 9V a um pino GPIO configurado como uma entrada pode danificar o processador se não fosse para
aqueles
chips de memória intermédia.

Capítulo 13 ■ O Gertboard
Figura 13-5. A secção I / O
Um detalhe importante a lembrar sobre os pinos na placa é que, enquanto eles podem ser configurados como "inputs"
ou "saídas", o Gertboard está ligado ao Pi e não é uma extensão do mesmo. Em outras palavras, se você chamar um pino no
Gertboard um "input", que significa que ele terá como entrada uma saída Pi. Da mesma forma, um pino de "saída" no Gertboard é
emitido
para um pino de "input" no Pi.
O Controlador de Motor
A seção controlador do motor do conselho (mostrado na Figura 13-6) é especialmente útil para a robótica e outras poder-
projetos intensivos. Ele permite que você controlar itens de alta potência, tais como motores de grande porte, com uma fonte de
alimentação externa.
Enquanto nós não vai usar isso em qualquer um dos projetos neste livro, cCapítulo 12, "O submersível," usa um motor externo
controlador. Se você tem um Gertboard, é perfeitamente aceitável para usá-lo em vez do controlador externo.
Capítulo 13 ■ O Gertboard
Figura 13-6. O controlador do motor
Os dois terminais de parafuso média são onde vai fixar o motor, e os terminais exteriores permitem que você anexar uma
fonte de energia capaz de fornecer mais corrente do que o Gertboard (ou o Pi) pode entregar com segurança. A direção e
velocidade do motor é controlada por dois conectores localizados logo acima os pinos GPIO marcado com adequadamente
MOTA-
e MOTB.
Open Collector driver
No lado direito da placa é um chip ULN2803 que é usado como um driver de coletor aberto. Os seis portas são usadas para
transformar
ligar e desligar dispositivos externos que requerem diferente de tensão, corrente mais elevada, ou poder separado do utilizado no
Pi ou
Gertboard. (Veja a Figura 13-7.) Em poucas palavras, o coletor aberto liga o térreo de um circuito externo para o chão
na placa, e ele dá o poder circuito. Cada porta pode levar até 50V e colocar para fora 500mA.
Capítulo 13 ■ O Gertboard
Figura 13-7. O coletor aberto
Como mencionado anteriormente, o seu conselho pode parecer um pouco diferente a partir dessas imagens, porque tem havido
modificações e melhorias para o projeto desde que a placa consideráveis foi lançado, mas o general
concepção é a mesma. Como você provavelmente pode ver agora, a Gertboard grandemente aumenta as capacidades do Pi
quando se trata
a interface com o mundo físico. Com controlador do motor a bordo do Gertboard e seus drivers de coletor que
deixe-a transformar circuitos externos e fora, seu Pi agora tem a capacidade de realmente tornar-se um mentor eletrônico
sobre o que quer coleção de circuitos que você decidir se conectar a ele-se é o seu sistema de automação residencial ou seu
pessoal 200W CO2, raio de morte movido a laser.
Saltadores
Quando você compra um Gertboard, ele vem com uma seleção de jumpers de plástico (mostrado na Figura 13-8). Estes são
utilizados
para fazer conexões entre os pinos adjacentes sem ter que usar muito curto fios de jumper-a situação que
rapidamente levar a uma confusão caótica na placa, dada a quantidade de jumpers que são comumente usados. Muito
frequentemente a sua
colocação determina se um pin especial vai funcionar como um "input" ou uma "saída." Não perca estes
jumpers. A maioria dos kits vendidos também vêm com alguns jumpers mais longos também. Se o seu caso não o fizesse, não se
preocupe; por mulheres padrão
jumpers femininos funcionar muito bem no tabuleiro.
Figura 13-8. Os jumpers Gertboard
Capítulo 13 ■ O Gertboard
Há um jumper que deve no lugar em todos os momentos-o jumper de alimentação (mostrado na Figura 13-9). Localizado na
inferior direito da placa, ele se conecta a entrada de 3.3V do Pi a todas as outras partes da prancha que precisam de energia.
Figura 13-9. Os dois primeiros pinos neste bloco deve ser conectado por um jumper
Agora que já tinha um olhar ao redor do Gertboard, vamos configurar alguns jumpers preliminares e, em seguida, fazer algumas
simples
projetos de fiação para ajudá-lo a pegar o jeito de usar o conselho e suas conexões.
Alguns projetos de exemplo
O manual Gertboard tem uma seleção de scripts para experimentar, escrito em C e Python. Então, vamos fazer
que agora. Você vai notar que muitos dos scripts são quase duplicatas, com nomes como leds-rg.py e leds-wp.py.
A razão é que existem duas bibliotecas diferentes que você pode usar para acessar pinos GPIO do PI: RPi.GPIO, o que você está
familiarizado com a partir deste livro, e-WiringPi uma biblioteca escrito e lançado por Gordon Henderson. Enquanto o WiringPi
biblioteca é eficaz, e ainda resolve alguns problemas com o Pi que não RPi.GPIO (faz como uma maneira fácil de
controlar saídas com PWM), eu escolhi usar RPi.GPIO para os projetos deste livro, por isso vamos concentrar-se no que
versão dos scripts aqui. Se você estiver interessado, no entanto, eu recomendo que você vá para a biblioteca WiringPi, porque é
destina-se a fazer a interface com o Pi assemelham biblioteca Fiação do Arduino.
Configurando o programa de configuração preliminar Jumper
Antes de usar a placa para alguns projetos simples, precisamos instalar alguns jumpers. O primeiro, é claro, foi
ilustrado na Figura 13-9: ele envia energia ao resto do bordo da sua entrada de 3.3V.
O segundo lote de jumpers precisa ser instalado no "output" lado de cada IC na seção I / O buffer.
Existem três chips (mostrado na Figura 13-5), cada um com oito pinos de saída diretamente acima dele. Usando quatro jumpers
por
chips, conectar cada par de pinos juntos. (Veja a Figura 13-10.)
Capítulo 13 ■ O Gertboard
Figura 13-10. Jumpers em uma posição de "output"
Essa configuração é necessária para as saídas em buffer funcionar como saídas em vez de entradas. Se você quiser usar o
pinos como entradas, os jumpers precisa estar conectado na linha inferior de pinos para cada IC. Uma vez que você tem os pinos
conectados como ilustrado, você pode continuar. Conecte o Pi em sua placa (como mostrado na Figura 13-1); uma vez que você
fizer isso,
vários LEDs na linha superior deve acender, mostrando que tudo tem o poder. Agora você pode começar com o seu
primeiro programa!
Fazendo Alguns LEDs Blink
Talvez a introdução mais fácil de o Gertboard é fazer algo impressionante, com os LEDs. Depois de tudo, não são
luzes piscando uma das razões que você está brincando ao redor com a eletrônica em primeiro lugar? O código Python no
Manual do usuário Gertboard foi escrito por Alex Eames de http://raspi.tv e é basicamente uma tradução do código C. Para
baixar o código Python para o conselho para experimentar, primeiro fazer um novo diretório em seu Pi, digitando
mkdir gertboard
e, em seguida, cd para o diretório. Uma vez que você estiver lá, fazer o download dos programas zipados, digitando
wget http://raspi.tv/download/GB_Python.zip
Em seguida, descompacte a pasta digitando
unzip GB_Python.zip
e cd para a pasta resultante.

Capítulo 13 ■ O Gertboard
O primeiro script simples que vamos usar é o leds-rg.py acima mencionado. Eu vou levá-lo através deste roteiro, tão aberto
para acompanhar e ver o que ele faz. As três primeiras linhas deve ser familiar para você; você está importando o tempo,
RPi.GPIO, e sys. A próxima linha, board_type = [-1] sys.argv, usa uma chamada de sistema para determinar que tipo de conselho
Você tem-no Gertboard normal ou a versão multiface Tandy. Esta informação é então usada para imprimir o correto
instruções de fiação para sua placa.
importação RPi.GPIO como GPIO
do tempo de sono de importação
sys importação
board_type = sys.argv [-1]
■ ■ Nota Porque você vai estar acompanhando no código que você acabou de baixar, todo o script não é
reproduzido aqui.
A próxima seção do código verifica o número da revisão do Pi para definir as portas de saída corretamente; a primeira revisão do
Pi usa a porta 21, enquanto que a segunda revisão usa a porta 27. O script, em seguida, cria uma lista dos ports-ports = [25, 24,
23,
7]. Depois que a lista for criada, então, copiá-lo para ports_rev e depois invertê-lo com uma chamada para o reverse ()
método. Agora temos duas listas de portos e um numerados sequencialmente para a frente, e um numerado para trás. o
próxima linha simplesmente define o modo de GPIO para BCM.
As próximas duas linhas são um excelente exemplo de Python para a sintaxe do loop. Eles simplesmente percorrer a lista de
portas
e pô-los todos para saídas:
para port_num nos portos:
GPIO.setup (port_num, GPIO.out)
A variável após a de pode ser nomeado o que quiser; a variável depois de a lista ou dicionário ou gama
ou qualquer item que é que você está interagindo através. Neste caso, as portas já foi declarado como uma lista e é
portanto iterable.
Nós, então, definir um método para transformar os LEDs on e off-led_drive (), que toma como parâmetros o número de
repetições (repetições), se estamos acendendo LEDs únicos ou múltiplos de cada vez (múltipla), e direção. Podemos, então,
usar esses parâmetros para fazer coisas interessantes com os LEDs.
De volta à função principal, que, em seguida, basta ir através de uma lista predefinida de chamadas para a função led_drive ().
Esse é o script.
Para configurar a placa, certifique-se os jumpers de saída são definidos como descrito anteriormente. Em seguida, dependendo de
qual Pi
revisão e design Gertboard você, ligue fios de ligação da secção de cabeçalho de GPIO (seção J) para a linha de
cabeçalhos de saída (secção B). Quando estiver pronto, o conselho deve ser semelhante à Figura 13-11.
Capítulo 13 ■ O Gertboard
Figura 13-11. Posições de jumper para o script LED
Agora você pode simplesmente executar o script digitando
sudo python leds-rg.py
e você será recompensado com algumas seqüências de luzes extravagantes.
Não, nós não escrever qualquer Python elaborado aqui, mas isso é uma espécie de ponto. Simplesmente conectando alguns fios,
nós
foram capazes de obter alguns resultados bastante impressionantes com apenas algumas linhas de código-não LEDs externos ou
resistores necessários.
Os pinos de saída pode ser ligado a qualquer número de dispositivos externos; Por exemplo, um lote de geradores de som,
possivelmente. Você poderia escrever um script que ativou os geradores em certas sequências e, assim, tocar uma música.
Experiências com Motor Controllers
A próxima seção do conselho podemos jogar com é a seção de controlador do motor. Ela tem dois pinos, MOTA e MOTB,
as quais estão ligadas aos dois fios provenientes de um motor de corrente contínua padrão. Os dois pinos pode lidar com um
máximo de 18V
DC e 2A. Cada um deles pode ser definida alta ou baixa, incluindo com uma modulação de largura de impulsos (PWM) de
controlo do sinal
a velocidade do motor, eo resultado de diferentes combinações de altos e baixos são apresentados na Tabela 13-1.
Tabela 13-1. Velocidades do motor e Direcções
MOTA MOTB
Direção Motor
BAIXO
BAIXO
PARAR
BAIXO
ALTO
NO SENTIDO HORÁRIO
ALTO
BAIXO
ANTI-HORÁRIO
ALTO
ALTO
PARAR
212

Capítulo 13 ■ O Gertboard
Assim, por exemplo, se você precisasse de seu motor a girar no sentido horário, você iria enviar um 0 a MOTA e um 1 a MOTB.
Novamente, o código Python que vem com os exemplos é uma excelente maneira de ver o que o motorista do motor pode fazer.
Abrir motor-rg.py, e dar uma olhada nisso. Mais uma vez, você deve reconhecer as primeiras importações, e, em seguida,
algumas variáveis
são declaradas, como são algumas funções projetadas para executar o motor. Algumas instruções de fiação são impressas,
dependendo
o modelo da placa, em seguida, o programa começa principal.
Para executá-lo, ligue um fio do seu motor para MOTA e outro para MOTB, e, em seguida, a (+) e (-) leva do seu
energia para o MOT + e pinos MOT-. Em seguida, execute dois fios de ligação de GP17 para MOTB e GP18 para MOTA, e tipo
sudo motor-rg.py python no prompt. O motor irá percorrer seus passos, indo de zero a full-speed e volta
a zero numa direcção, e, em seguida, repetindo o processo no outro sentido. Como você pode dizer a partir do código, ele usa
GPIO pinos 17 e 18 como saídas; Obviamente, se você optar por usar o controlador do motor, você pode definir o que quer que
você pins
gostaria de ser as saídas do motor.
Utilização dos drivers open collector
Os motoristas coletor aberto nos Gertboard são, talvez, um dos mais esquecidos, ainda mais útil, partes do
borda. Isso porque eles podem ser usados para ligar um circuito externo ligado ou desligado usando o Pi, o que quer que o circuito
pode
o que quer que seja e de tensão ou amperagem ele precisa (dentro da razão, é claro). Desta forma, eles são semelhantes ao motor
controlador, mas muito mais adaptável-o controlador do motor pode ser usado apenas para motores, depois de tudo!
Existem seis condutores disponível, tornando-se possível conduzir seis circuitos externos. Um circuito de teste bom é
simplesmente um LED
e uma resistência em série.
■ Cuidado Você não sabe para sempre ligar um resistor em linha com os seus LEDs, certo? Resistências limitar o
fluxo de corrente, assim
evitando um excesso de corrente da queima para um LED.
Pegue uma pequena placa de ensaio, ligar uma fonte de energia como uma bateria de 9V para ele, e, em seguida, ligar o circuito
de LED para um
completamente diferente fileira de insumos. Em seguida, execute o programa de coletor aberto, digitando sudo python ocol-rg.py,
selecione um
motorista, e siga as instruções de instalação elétrica que imprime. Para testar o primeiro piloto, por exemplo, siga estes passos:
1.
Conecte o (+) de seu 9V para o pino RPWR no cabeçalho J6 (no canto superior direito da placa).
2.
Conecte o (-) de sua 9V para qualquer pino disponível na placa marcado GND. (Eles são todos
conectado, depois de tudo.)
3.
Conecte o condutor negativo do seu LED ao pino identificado RLY1 no cabeçalho J12 (novamente, pelo
no canto superior direito da placa).
4.
Ligue o condutor positivo (depois de um resistor em série) a qualquer pinos na placa marcado RPWR.
Pressione Enter, e você verá o LED piscam várias vezes.
Impressionante? Não, não realmente. Mas vale a pena repetir: a capacidade de controlar um circuito externo, completamente
independente da fonte de alimentação do Pi, é um passo importante. Ele permite que o Pi para actuar como um regente, ou
titereiro,
transformando subsistemas ligado ou desligado conforme necessário.
Usando os conversores digitais / analógicos
O Gertboard está equipada com um chip conversor digital-analógico de microchip. É tanto um de 8, 10 ou 12-bit
chips, dependendo do que partes estavam disponíveis quando a placa foi fabricado. Para determinar qual deles você tem,
inspecionar de perto o chip U10. (Veja a Figura 13-12.)
Capítulo 13 ■ O Gertboard
Figura 13-12. Conversor D / A por Microchip
Há um número carimbado no chip-quer 4802, 4812, ou 4822. O terceiro dígito vai dizer se o seu chip é um
Versão 8-, 10-, ou 12-bits. Independentemente de qual chip que você tem, a pinagem é o mesmo, e os resultados são os mesmos:
o envio de
uma entrada digital do ALTO, ou (11111111, 1111111111, ou 111111111111, dependendo da sua versão do chip) resulta de tudo
1 em um
voltagem de 2.04V. De acordo com a folha de dados do chip, a saída do chip pode ser determinada pela seguinte equação:
V out = (D na ÷ 256) × 2.048V
O conversor analógico-para-digital da placa também é da Microchip, e é um MPC3002 10 bits. Ele retorna um
ALTA digital 1111111111 quando uma tensão analógica de 3.3V é aplicada. Se você aplicar uma tensão mais baixa, o valor de 10
bits
serão ajustados em conformidade. Então, se você está tentando ler sensor de pressão que eu mencionei, e é só ler 2.7V, o
valor retornado do MPC3002 será menor, e seu programa pode agir sobre esse valor menor como quiser.
Resumo
Essa é uma visão concisa e útil do Gertboard e seus diversos componentes. Você tem um passeio do conselho de administração,
aprendeu a usar jumpers para ligar vários componentes, e usou alguns programas em Python disponíveis para testar alguns
dos diferentes usos para o conselho.
A seção de um nós não cobrimos em detalhe ou experimentar é o chip Atmega, e há uma razão para isso:
Eu cubro que com muito mais detalhe no próximo cCapítulo, sobre o Raspberry Pi eo Arduino.

Capítulo 14
O Raspberry Pi e o Arduino
Manteiga de amendoim e geléia. Batman e Robin. Dr. Jekyll e Mr. Hyde. Algumas coisas são voltadas apenas para ir junto, e
nós sabemos que a partir do momento em que estabelecem os olhos sobre a combinação. Tal é o caso com o Raspberry Pi eo
Arduino. Muitos amadores e engenheiros (inclusive eu) tinha sido usando o Arduino para projetos, mas foram desejando
havia um dispositivo semelhante em tamanho, com apenas um pouco mais poder. Bem, os nossos desejos foram concedidas com
a introdução do
Pi. Ele tem mais poder do que o Arduino (o Arduino é de apenas um microcontrolador), e ele tem um processador ARM
completo.
É claro que outras opções estão no mercado placa do microprocessador consumidor. Uma escolha popular é o BeagleBoard,
uma placa baseada em ARM-processador que funciona também diferentes versões do Linux, incluindo Ubuntu e até mesmo
Angstrom. As suas
principal desvantagem é o seu preço de $ 100. Parallax põe para fora algumas placas prosumer qualidade, bem como, tais como a
oito processadores
Hélice com uma placa de ensaio built-in, mas, novamente, é mais parecido com o Pi que o Arduino, e como esta escrito
custa $ 129. Entrada mais recente da Intel no mercado de microprocessadores é o Galileo, um desenvolvimento compatível com
Arduino
placa, que também vale para aproximadamente US $ 100.
Nenhuma dessas placas, no entanto, ganharam em qualquer lugar perto o seguimento do Arduino. Uma cultura inteira tem
surgiram em torno desta pequena placa popular e as coisas incríveis que a pessoa média pode fazer com ele. tem
muitos livros, sites, fóruns e grupos dedicados a seus projetos, por isso não vou refazer essas fontes aqui. Contudo,
informações sobre a interface do Arduino com o Raspberry Pi é um pouco mais escassos. O Pi é um computador baseado no
Linux,
e como tal é perfeitamente capaz de executar o software Arduino. Neste cCapítulo, eu vou levá-lo através da instalação que
software e criar um ou dois projetos simples que funcionam exclusivamente na Pi eo Arduino-no computador de mesa é
requeridos.

Explorando o Arduino
Para aqueles de vocês não familiarizados com ele, o Arduino é uma aplicação popular de tecnologia de microcontroladores,
embalados
para tornar mais fácil para o leigo para programar e executar tarefas complexas, interessantes com alguns eletrônicos complexos.
Para as pessoas que querem apenas fazer coisas, é uma bênção; o Integrated Development Environment (IDE) utilizado para
programa
o Arduino é executado em praticamente qualquer computador, a linguagem de programação é muito parecida com C, e talvez o
melhor de-
todo-o conselho é barato, com a maioria das versões do Arduino que custam menos de US $ 30 US.
Existem várias versões do Arduino, que vão desde o pequeno Arduino Nano ao Arduino muito maior
Duemilanove (mostrado na Figura 14-1) e os mega. Todas as placas têm um chip ATmega168 ou 328 como seu centro
processador, e eles têm um chip serial-to-USB onboard para que possam se comunicar com o computador. Eles têm
uma selecção de pontes, similares aos pinos GPIO sobre o Pi, mas a maioria deles são tomadas fêmeas em vez de pinos machos.
Capítulo 14 ■ O Raspberry Pi e o Arduino
Figura 14-1. O Arduino Duemilanove
Usando o Arduino em um computador regular é um processo simples, começando com o download da versão IDE
apropriada para o seu computador a partir do site principal do projeto, www.arduino.cc. Uma vez instalado, você pode abrir
um novo programa Arduino, chamado de "esboço", e imediatamente começar a fazer a interface com hardware conectados à
placa.
(Veja a Figura 14-2.)
Capítulo 14 ■ O Raspberry Pi eo Arduino
Figura 14-2. Um esboço típico Arduino
Na figura, você pode ver o código usado para fazer a interface com um servo; você incluir a biblioteca Servo.h, criar um servo
objeto chamado myservo, e em seguida, escrever valores para esse objeto, a fim de movê-lo. Da mesma forma, para acender um
LED, por exemplo,
você simplesmente definir um pino especial para ser uma saída, e em seguida, enviar valores de "1" ou "0" para que ele vire um
LED conectado ou
off, respectivamente. Como mencionei antes, você pode ver que não é código Python. As linhas são terminadas com ponto e
vírgula,
e blocos de códigos são delineadas com suportes, e não dentados.
Outro recurso interessante de instalação do Arduino é que você pode puxar o chip Atmega fora do tabuleiro e usá-lo em um
breadboarded projeto autônomo. Em outras palavras, digamos que você quer projetar um circuito no Arduino que irá utilizar
servos e motores para abrir e fechar uma porta de animal de estimação em sua casa. Você pode escrever e testar o programa em
seu Arduino
bordo, mas, em seguida, você pode puxar o chip e colocá-lo em seu circuito independente. Depois, você pode substituir o chip na
placa com um outro de Atmega (custando cerca de US $ 3), queimar o bootloader Arduino no chip, e ir em
programação. Você não tem que usar um Arduino inteira cada vez que você criar um novo circuito.

Capítulo 14 ■ O Raspberry Pi eo Arduino


Instalando o Arduino IDE sobre o Pi
Instalando o Arduino IDE sobre o Pi é uma simples questão de abrir uma linha de comando e digitando
sudo apt-get install arduino
Você será solicitado a aceitar todas as dependências necessárias e, em seguida, o IDE irá baixar e instalar.
Quando terminar, você vai precisar instalar-pyserial uma biblioteca Python que torna mais fácil para se comunicar com o
Arduino através de uma interface serial. Abra Midori (navegador de Internet do Pi), e navegue até http: // sourceforge.
líquidas / projetos / pyserial /. Clique no botão "Download", e salve o arquivo. É um arquivo compactado, o que significa que
você vai
tem que descompactar e descompacte-o. Voltar na janela do seu terminal, navegue até a localização do arquivo e descompacte /
untar-lo digitando
gunzip pyserial-2.7.tar.gz
tar -xvf pyserial-2.7.tar
Você terá uma nova pasta chamada pyserial-2.7. Navegar para essa pasta digitando cd, e instalar a biblioteca, digitando
sudo python setup.py install
■ ■ Observação O processo descrito nesta seção é rotina ao instalar uma biblioteca baseada em Python. Setup.py é
um comum
script usado para instalar uma biblioteca Python como esta, e que exige a instalação parâmetro para executar. Se
você está instalando um módulo
que é todo o sistema (em outras palavras, aquele que não exige que você seja no mesmo diretório para executá-lo),
dentro de seu descompactado
pasta você vai encontrar na maioria das vezes uma pasta chamada "construção" e um arquivo chamado "setup.py."
Você não precisa fazer nada com o
construir pasta, porque o setup.py script faz tudo para você. Usando sudo (você vai estar mudando arquivos de nível
de sistema,
então você precisa para executar o script como o usuário root) digitar sudo python setup.py install em seu terminal, e o
script irá instalar o módulo.
A biblioteca está agora disponível para o seu uso em qualquer script Python.
Para testá-lo, nós vamos ter que escrever algum código Arduino. Tenha paciência comigo, e eu vou levá-lo através dele, uma vez
que pode ser novo para
vocês. Abra o seu Arduino IDE (mostrado na Figura 14-3), e na janela de esboço que aparece, digite o seguinte código:
int ledPin = 13;
void setup ()
{
pinMode (ledPin, OUTPUT);
Serial.begin (9600);
}
void loop ()
{
Serial.println ("Olá, Raspberry Pi!");
atraso (1000);
}
Capítulo 14 ■ O Raspberry Pi eo Arduino
Figura 14-3. Abrindo o Arduino IDE sobre o Pi
A primeira linha deste script define o ledPin variável para um número, função 13. A configuração seguinte () define o pino 13
para ser uma saída, e em seguida, abre a comunicação com a porta serial. Finalmente, a função loop () (que é cada
Loop principal programa do esboço Arduino) imprime a cadeia "Olá, Raspberry Pi!" À porta serial a cada 1000 milissegundos
(um segundo). Salve o desenho e nomeá-la pi_test.
Agora, conecte o Arduino para o seu Pi com o cabo USB do Arduino. Lembre-se fosse um cabo USB, o Pi
vai ser realmente comunicar através do protocolo de série, porque o Arduino tem um conversor USB onboard para serial.
Quando a luz verde de alimentação do Arduino vem, você precisará selecioná-lo a partir das placas disponíveis no menu
"Ferramentas"
em sua Arduino IDE. (Veja a Figura 14-4.)
Capítulo 14 ■ O Raspberry Pi eo Arduino
Figura 14-4. Selecionando sua placa Arduino
Antes de carregar o script pi-teste que você acabou de escrever, é uma boa idéia para se certificar de que sua placa está conectado
corretamente e que você pode fazer upload de um esboço a ele. Para fazer isso, vamos executar o sketch "Blink", que vem com o
Arduino
IDE. No menu Arquivo, selecione Exemplos> 01. Noções básicas> Blink. (Veja a Figura 14-5). O esboço Blink abrem em
nova janela para que você não perca o seu trabalho para o esboço pi-teste. O esboço Blink simplesmente pisca o Arduino de
incorporado LED on e off, e é muitas vezes usado para se certificar que tudo na sua configuração está configurado corretamente.
Capítulo 14 ■ O Raspberry Pi eo Arduino
Figura 14-5. Carregando o esboço Blink
Quando o esboço Blink é carregado, selecione Carregar no menu Arquivo, e esperar que o IDE para compilar o Blink
esboçar e enviá-lo para sua placa. Quando a janela Arduino exibe "Feito o upload", o LED vermelho no seu
Arduino deve estar piscando lentamente. Se não, verifique as conexões e tente carregar novamente. Você pode obter uma
mensagem de erro informando que a porta COM que você selecionou não pode ser encontrada e perguntando se você quer
escolher um outro.
Tome nota da porta sugerido (você vai usar essa informação mais tarde), selecioná-lo e fazer upload de seu esboço.
Depois de saber que sua conexão está correta, mude para o esboço pi_test e enviá-lo para o Arduino por
escolher "Upload" no menu Arquivo.
Quando ele é compilado e carregado em uma janela de terminal, iniciar uma sessão de Python e digite o seguinte:
série de importação
Ser = serial.Serial ('/ dev / ttyUSB0', 9600)
Capítulo 14 ■ O Raspberry Pi eo Arduino
Aqui está a importar a biblioteca de série e iniciar uma comunicação sobre o porto USB0 em 9600, o que é
o valor que colocamos em nosso código Arduino. Se você tivesse que usar uma porta diferente no protocolo de conexão
anteriormente, usar esse
porta em vez. Por exemplo, você pode precisar fazer a segunda linha ler
Ser = serial.Serial ('/ dev / ttyACM0', 9600)
se você tivesse que usar a porta ttyACM0 para sua conexão.
Agora podemos ler a partir do dispositivo-a-série Arduino que temos dito para transmitir uma vez a cada segundo.
Continuando em sua sessão Python, tipo
while True:
ser.readline ()
Pressione Enter duas vezes para terminar o loop while, e seu terminal deve preencher imediatamente com o texto, como mostrado
na
Figura 14-6. Quando você ficar entediado assistindo o "Olá, Raspberry Pi \ r \ n" linhas preencher cada segundo, enquanto a sair
loop que está funcionando, pressionando Ctrl + C.
Figura 14-6. Leitura de porta serial do Arduino
Então, nós temos estabelecido agora que podemos ler a partir do Arduino através da conexão serial. Vamos estabelecer que
pudermos
escrever para ele, também. Volte para o seu esboço Arduino pi-teste, e alterar a função void loop () para o seguinte:
void loop ()
{
se (Serial.available ())
{
de flash (Serial.read () - '0');
}
}

Capítulo 14 ■ O Raspberry Pi eo Arduino


Este código diz o Arduino que se é capaz de ler a partir da ligação em série para dar o primeiro número inteiro recebida
(o "0") e enviá-lo como um parâmetro para a função de flash (), que segue aqui. Depois que a função loop (), digite o
seguinte em seu esboço:
Flash void (int n)
{
for (int i = 0; i <n; i ++)
{
digitalWrite (ledPin, HIGH);
atraso (100);
digitalWrite (ledPin, LOW);
atraso (100);
}
}
Esta função pisca LED bordo do Arduino (ligado ao seu pino # 13) n número de vezes, que foram passados
a ele como um parâmetro. Como você pode ver, o conceito é semelhante à funcionalidade de saída do GPIO; primeiro você
declarar a
pin para ser uma saída, e em seguida, escrever, quer um valor alto ou de baixo para ele para transformá-lo ligado ou desligado.
Salve o esboço de novo e
o re-envio para sua placa Arduino. Em seguida, voltar ao seu terminal, e no tipo de sessão mesmo Python
ser.write ('4')
e você deve ser recompensado com a bordo do Arduino LED piscando quatro vezes. Experimente com diferentes números e
certifique-se de que está funcionando. Lembre-se, porém, que o Arduino é configurado para ler apenas o primeiro número inteiro
que lhe foi enviado.
Se você digitar
ser.write ('10 ')
ele irá piscar uma vez, e não 10 vezes.
Parabéns! Agora você é capaz de ler e escrever para o seu Arduino do seu Raspberry Pi!

Executando um Servo
É certo que, piscando um LED no comando não é a operação mais impressionante que você pode fazer com seu Arduino / Pi
combinação. Meu objetivo principal é ensinar-lhe como obter os dois dispositivos se comuniquem, e deixar os possíveis usos
e as implicações até você, mas vamos discutir se comunicando com um servo ligado ao seu Arduino.
Por uma questão de fato, tudo o que precisamos fazer é modificar o nosso código LED apenas um pouco, para fazer a interface
com um servo em vez de um
CONDUZIU. Limpar o texto de seu esboço pi_test, e substituí-lo com o seguinte:
#include <Servo.h>
Servo myservo;
void setup ()
{
myservo.attach (9);
Serial.begin (9600);
}

Capítulo 14 ■ O Raspberry Pi eo Arduino


void loop ()
{
se (Serial.available ())
{
unidade (Serial.read () - '0');
}
atraso (1000);
}
unidade void (int n)
{
se (N <5)
{
myservo.write (50);
}
outro
{
myservo.write (250);
}
}
Este código leva o inteiro que você digita em seu prompt Python, traduz-lo para uma velocidade ou outro com base em sua
valor, em seguida, escreve esse valor ao servo como uma velocidade. Para testá-lo, ligar cabo de alimentação do seu servo a 5V
do Arduino
pin, o fio terra ao pino GND do Arduino, eo fio de sinal para o pino do Arduino # 9. Em seguida, salve o código, fazer upload
-lo para sua placa, e de novo em seu prompt de Python-experimento com diferentes valores de digitação
ser.write ('5')
0-9 no prompt, e ver como o servo responde.
Sim, é um código muito simples, mas espero que você compreender os conceitos subjacentes. Comunicando-se com o
Arduino sobre interface serial do Pi não é diferente de se comunicar com, digamos, uma unidade de GPS ou outro pequeno
chip de fuga. O Arduino, no entanto, não é apenas um pouco mais inteligente, mas também é infinitamente mais expansível,
permitindo que você adicione tantas peças adicionais como o Pi faz, se não mais.

O Arduino e a Gertboard
Você pode estar se perguntando, já que eu já discutimos usando o Gertboard com o Pi, como fazer a interface com o Atmega
chip na Gertboard. O chip Atmega, afinal, é o chip utilizado no Arduino, então é lógico que você
poderia usar IDE do Arduino para interagir com ele.
A resposta é que, para usar o chip Atmega no Gertboard com o Arduino IDE, você precisará instalar um pouco
de software extra e fazer algumas alterações nos arquivos de configuração do Arduino Pi de e. Finalmente (talvez o mais
preocupante), que exige quatro de seus pinos GPIO para se comunicar com o chip Atmega. Ao mesmo tempo, usando um externo
Arduino é bastante simples e não requer nenhum dos seus preciosos pinos GPIO para ser sacrificado. Se você deseja instalar
o software Gertboard, um excelente tutorial passo a passo e está disponível na página da web em Gordon Henderson
http://bit.ly/1fgEFeo. Lembre-se que Gordon é o desenvolvedor da biblioteca WiringPi eu menciono no cCapítulo 13,
"O Gertboard." Essa biblioteca tenta torná-lo tão fácil de acessar pinos GPIO do Raspberry Pi, pois é para acessar o
Pins da Arduino. Gordon fez um trabalho incrível por escrito e disponibilizar o software necessário
programar chips Atmega do Gertboard, e eu recomendo que você levar algum tempo para ir através de seu site de ele-
faz um trabalho melhor do que eu jamais poderia explicar o processo.
224

Capítulo 14 ■ O Raspberry Pi eo Arduino

Resumo
Embora este cCapítulo forneceu apenas uma curta introdução sobre como a interface do Arduino com o Raspberry Pi,
Espero que agora você percebe que a comunicação com outro quadro como o Arduino, especialmente através de uma conexão
serial,
é uma questão simples e não é diferente do que se comunicar com qualquer outro dispositivo. A diferença principal, é claro, que é
você pode programar o Arduino usando seu IDE, permitindo que basear as suas acções em informações fornecidas a ele desde o
Pi.
Da mesma forma, o Arduino pode ter sensores ligados a ele, agir como um hub de rede de sensores, e fornecer informações à
Pi. Isso pode permitir que você para descarregar um pouco do poder de processamento para o Arduino e liberar o seu Pi para mais
Processador
tarefas intensivas.
Em suma, o Arduino eo Raspberry Pi não competir com outro, eles complementam um ao outro. Cada fulfills
tarefas de uma forma diferente, e eles podem ser usados em conjunto para fazer operações arrumadas em seus projetos. Tire
algum tempo para
familiarizar-se com a interface-você será feliz que você fez.

Índice
Placa de ensaio
????
placa de ensaio analógico, 60
Anemômetro
conexões de energia e medidores, 59
montagem, 87
protótipo, 59
ligar a Pi, 87-88
slot de encoder em tubo de PVC, 86
encoder com pás de vento, 85
??
centro plataforma, 86
Brinquedo do gato
eixo quadrado, 85
conexão pedaços
velocidade do vento, 84
placa de ensaio, 140
Arduino, 2
brinquedo do gato concluída, 141
Arduino IDE
interconexões componente final, 140
Código Arduino, 218
Tubo de PVC, 142
Arduino Duemilanove, 215-216
Fios de solda, 141
esboço piscar, 221
código final, 142-143
função de flash (), 223
GPIO Biblioteca
instalar pyserial-Python biblioteca, 218
Pi, 130
LED, 223
pinagem, 131
função loop (), 219
tensão, 132
myservo, 217
mecanismo de laser
esboço pi-teste, 220-221
ponteiro laser concluída, 136
linguagem de programação, 215
Pinos GPIO do pi, 135
selecção, 220
mecanismo de parafuso, ponteiro laser, 135
porta serial, 222
laser para ligação do servo, 136-137
servo, 224
sensor de movimento (ver sensor de movimento, brinquedo do gato)
função setup (), 219
ponteiro laser ordinário, 128
esboço, 216-217
peças, 127-128
Cabo USB, 219
movimento aleatório, 128
função void loop (), 222
números aleatórios
Atmega de chip, 203-204
ponto flutuante, 129
Veículo submarino autônomo (AUV), 173
geração, 129-130
AUV. Ver Autónoma
Docs Python, 130
veículo submarino (AUV)
servos (ver Servos)
Interface de linha de comando (CLI), 16
Common Internet File System (CIFS), 104
??
Barómetro, 93-95
??
BDFL. Ver Benevolent Dictator For Life (BDFL)
Ditador benevolente para a vida (BDFL), 33
Conversores digitais / analógicos, 213-214

■ índice
????
??
Eletrônicos
Pontes H, 185
9V bateria electrocussão, 52
HDMI. Ver multimídia de alta definição
aterramento, 53
porta de interface (HDMI)
equações elétricas, 52-53
High Definition Multimedia Interface
extintores de incêndio, 63
Port (HDMI), 5-7
kit de primeiros socorros, 63
Home sistema de segurança
calor, 62
descrição, 111
ICs, 53
cães, 111
indutância, 52
Raspberry Pi, 112
equipamento de segurança do laboratório, 51
rede de sensores (ver rede Sensor,
Lei de Ohm, 52
sistema de segurança em casa)
peças organização de armazenamento, 64
HTML. Ver HyperText Markup Language (HTML)
poder, 52
HyperText Markup Language (HTML), 69
Python, 51
resistência, 53
????
robótica (ver Robotics)
objetos pontiagudos, 63
ICs. Ver Circuitos integrados (ICs)
técnicas de soldagem, 66
IDLE. Veja desenvolvimento integrado
veias, 52
Ambiente (IDLE)
ventilação, 64
Circuitos integrados, 53
circuito de água, 53
Desenvolvimento integrado
usar óculos de segurança, 63
Ambiente (IDLE)
definição, 34
ícone, 34
????
digitação, 36-37
FFMPEG, 165-166
Janela, 35
Inter-Integrated Circuit (I2C ou IIC), 82-83, 179
Eu seção / O, 205-206
??
/ Saída (GPIO) pinos de entrada de Uso Geral, 174-176
????
Gertboard
Atmega de chip, 203-204
Jumpers, Gertboard, 208
ligado a Pi, 202
conversores, 204-205
????
conversores digitais / analógicos, 213-214
Pinos GPIO, 202 - 203
Projeto paralelo teste de LED, 183-185
circuitos integrados (CIs), 201
Linux
Eu seção / O, 205-206
comandos, 18-21
jumpers, 208
Descrição, 15
LEDs, 210-212
kernel, 16
Microchip, 214
Ícone LXTerminal, Pi desktop, 21-22
controlador do motor, 206-207
gerenciadores de pacotes, 23-24
velocidades do motor e direções, 212
Pi
coletor aberto, 207-208, 213
CLI, 16
GPIO broches da PI / RPi.GPIO, 209
arquivos e sistema de arquivo, 17
saltador preliminar, 209-210
Terminal de Raspberry Pi, 16
placa de circuito impresso (PCB), 201
usuário root vs. sudo, 17
Raspberry Pi projeto, 201
conchas, 22 - 23
WiringPi, 209
editores de texto, 24 - 29
GPIO. Ver General Purpose Input / Output (GPIO) pins
campo de jogos dos usuários, 15
Os dados do GPS, 164
Permissões de arquivos Linux, 106

■ Index
PIME, 164 - 165
????
Python
Servidor de mídia
BDFL, 33
clientes, 101
tipos de dados
Linux / OS X
dicionários, 42 - 43
menu de conexão, 109
listas, 41 - 42
"Conectar ao Servidor" janela de diálogo, Mac, 109
números, 39
Unidade NTFS, 101-103
cordas, 40 - 41
Samba
tuplas e arquivos, 43 - 44
bug apóstrofo, 107
IDLE (ver desenvolvimento integrado
configuração, 104-105
Ambiente (IDLE))
Permissões de arquivos Linux, 106
OOP, 49
reinício, 107-108
"PEP 20 (Te Zen do Python)" Documento, 33
Sensor de movimento, Toy Cat
programação
queimada LED, 139
definição, 44
entrada flutuante, 138
funções, 48 - 49
Sensor IR e configuração de teste LED, 139
IF testes, 45 - 46
Sensor IR Parallax, 138
loops, 46 - 48
pullup / resistor suspenso, 138
scripting vs. linguagem de programação, 31 - 32
Script Python, 138
roteiros, 38 - 39
Controladores de motor, 206 - 207, 212
terminal, 37
Gps módulo Python, 148
Módulos Python
??
bela sopa 4 (BS4), 75
National Marine Electronics
br.open (), 75
Association (NMEA), 146
processo de download, 77 - 78
New Out Of Box Software (NOOBS), 10 - 12
para loop, 77
Nova tecnologia de sistema de arquivos (NTFS)
imagens diretório, 77
resultados blkid, 103
corda linkText, 78
descrição, 101
mechanize.Browser (), 74
tamanhos de arquivos, 102
módulo de mecanização, 72
fstab, 103
sistema operativo, 78
"My Book", 102 - 103
análise, bela sopa 4 (BS4), 73
NTFS-3G, 102
função de recuperar (), 77
NMEA. Ver National Marine Electronics
String.Contains (), 76
Association (NMEA)
str (link), 76
NOOBS. Ver New Out Of Box Software (NOOBS)
Conexões TCP, 72
NTFS. Ver Novo sistema de arquivos tecnologia (NTFS)
biblioteca urllib, 73
URLopener. recuperar (), 76
webbot.py, 75
??
teia de aranha, 72
Programação orientada a objetos (OOP), 49, 151
OOP. Veja a programação orientada a objetos (OOP)
Colector aberto, 207 - 208
??
Sistema operacional (OS), Pi
(RC) do avião controlado por rádio
formato, cartão, 10
peças adicionais, 145
NOOBS, 10
inicialização automática, 152 - 153
fluxo CGPS, 148
configurações, 146
????
Google Earth no Mac, 156 - 157
Análise, bot Web
gpsd, 146
bela sopa 4 (BS4), 71
Unidade de GPS, 155
soup.prettify print (), 71
Programa de conversão de KML, 159
Python, 71
Arquivo KML, 149 - 150
expressões regulares, 72
kml.py, 156

■ índice
Rádio-controlado (RC) do avião (cont.)
chaves de fenda, 54
baterias de polímero de lítio, 154
ferro de solda, 61-62
visão geral do setup, 155
supercola, 57
Pi na asa do avião, 156
cortadores de fio, 55-56
plane.kml, 156 - 157
ROV. Veja Veículo de Operação Remota (ROV)
programa de avião, 158
ID do processo (PID), 157
??
Módulo de registro do Python, 148 - 149
Raspberry Pi e GPS, 145
Rede de sensores, sistema de segurança em casa
rosqueamento e objetos, 151 - 152
conexão bit, 124
Carregador de carro USB, 154
callback, 124
Raspberry Pi
definição, 112
Arduino (veja Arduino IDE)
código final, 125 - 126
Código Arduino, 218
Pins GPIO, 116, 118
Pino GND do Arduino, 224
sensor magnético, 122
Processador ARM, 215
sensor de movimento, 118 - 119
Borda
A câmera de Pi, 123
tomadas de vídeo e de áudio RCA, 6
interruptor de pressão, 121
comparação, dispositivos, 7
pullup / resistor suspenso, 112
Portas Ethernet e USB, 6
interruptor de lâminas, 120 - 121
Pins GPIO, 6
Enviando uma mensagem de texto, Pi, 123 - 124
Porta HDMI, 5
lista de compras de peças, 113
modelo B, 4
rede sem fio, 113
porta de alimentação, 5
Edimax EW-7811UN, 113 - 114
Cartão SD, 5
ferramenta Raspi-config, 114
SoC, 6
Servidor SSH, 114, 116
fichas, 2
Rede sem fio, 114, 116
complementar, 225
Server Message Block (SMB), 104
configuração, 11 - 12
Servos
conexão, periféricos, 10
mudando ciclo de trabalho, 134
Gertboard, 224
construção
requisitos de hardware
X ligado e servos Y, 135
acrescentando, monitor, 7
pan e tilt mecanismo servo, 134
acrescentando, hub USB, 7 - 8
ciclos de trabalho, 133
conexão, poder, 7
comprimento, pulso, 132
dongle USB sem fio, 8 - 9
Pi e Python, 133
Computador baseado no Linux, 215
modulação por largura de pulso
OS (ver sistema operacional (OS), Pi)
(PWM), 132
placas prosumer-grade, 215
servo standard, 133
Python, 1
SoC. Ver Sistema em um Chip (SoC)
Servo, 223
Ferro de solda
desligamento, 13
ferramenta mãos, 61
utiliza, Foundation, 3
bomba de vácuo, 61
RC avião. Veja controlado por rádio (RC) do avião
Weller WES51, 61
Veículo de Operação Remota (ROV), 173
Técnicas de soldagem
Rotações por segundo (RPS), 88 - 89
junta de solda fria, 65 - 66
Robótica
calor, 65
placa de ensaio, 59-60
superfícies e estanho, 65
cortes mais finos, 56
Submersível
pistola de cola quente, 57
planos de construção
ampliação luz, 56-57
submersível concluída, 197
multímetro, 57-58
nunchuck conectar, 196
alicates e descascadores de fios, 54-55
quadro, 192
filtro de linha, 61
epóxi marinha, 196
fonte de alimentação, 58-59
Pi posicionamento da câmera, 197 - 198

■ Index
Gabinete do Pi, 192 - 193
peças, 161
fotografia subaquática, 199 - 200
Instalação PIME, 164 - 165
Carregador de carro USB, 196
Pi, preparação, 161, 166
controlar sub (ver Wii nunchuk)
configuração do regulador-balão pescoço, 167 - 168
Cron scheduler, 188
baraço, refrigerador, 169
Pi extra, 173
threading e objetos, 167
código final, 189 - 191
Estação meteorológica
programa de controle final, 189
anemômetro (ver anemômetro)
Pins GPIO, 174, 176
barómetro (ver Barometer)
peças, 174
bocados, 95 - 96
programa, faça o login remotamente, 187 - 188
fritas breadboarded, 96
Raspberry Pi instalação da placa câmera, 176 - 178
bússola digital, 90 - 91
Sistema em um Chip (SoC), 6
código final, 97 - 99
I2C Protocol (ver Inter-Integrated
Circuito (IIC ou I2C))
????
peças, 82
TCP. Veja Transmission Control Protocol (TCP)
RPS (ver revoluções por segundo (RPS))
Sensor de temperatura / humidade, 92 - 93
sensor de temperatura / humidade
Editores de texto
(Ver sensor de temperatura / humidade)
descrição, 24
Bot Web
emacs, 26 - 28
bot etiqueta, 68
leafpad, 29
ferramenta de descarga de linha de comando, 70
nano, 28
Dane-Elec, 74
vim, 25 - 26
flash drive, 74
vim vs. emacs vs. nano, 25
HTML, 69
Transmission Control Protocol (TCP), 69
Redes IEEE, 74
informações, 67
formatos de arquivos legítimos, 73
????
parsing páginas web, 71-72
Interface UART. Veja Universal Asynchronous
Módulos Python (ver módulos Python)
Receiver / Transmitter (UART) Interface
aranha, 68
Universal Asynchronous Receiver / Transmitter
Conexão TCP, 70
(UART) interface, 146, 159
mapa visual, internet, 67
webbot.py, 79
protocolos de comunicação web, 69
????
White Star, 68
Impermeabilização procedimentos, submersível
Wii nunchuk
para efeitos de montagem, 195
adaptador, 179 - 180
cera de parafina, 195
I2C ou IIC, 179 - 181
frasco de comprimido, 194
Projeto paralelo teste de LED, 183 - 185
vedação, 193
leitura, 182
Balões meteorológicos
sub motores e câmera
placa câmera, 168
Pontes H, 185
festival, 165
motores e controlador do motor, 186 - 187
Instalação FFMPEG, 165 - 166
valores do motor e configurações, 186
código final, 171 - 172
teste, 181
Os dados do GPS, 164
Descascadores de fios, a robótica
Receptor GPS, 162 - 163
alicate de bico, 54
imagens, 170 - 171
furos pré-feitos sob medida, 55
pára-quedas, 169
versão 1 e 2, 54 - 55

Saiba Raspberry Pi
Programação com Python
Wolfram Donat

Aprenda Programação Raspberry Pi com Python


Copyright © 2014 pela Wolfram Donat
Tis trabalho está sujeito a direitos de autor. Todos os direitos são reservados pelo Publisher, se o todo ou parte do material
está em causa, especificamente, os direitos de tradução, reimpressão, a reutilização de ilustrações, recitação, radiodifusão,
reprodução de microfilmes ou de qualquer outra forma física, e transmissão ou o armazenamento e recuperação de informações,
adaptação eletrônica, software de computador ou por metodologia similar ou não agora conhecido ou futuramente desenvolvido.
Ficam isentos desta reserva legal são breves trechos em conexão com críticas ou análise acadêmica ou material
fornecido especificamente para a finalidade de ser inserido e executado num sistema de computador, para uso exclusivo pela
comprador do trabalho. A duplicação desta publicação ou de partes dele só é permitida sob as disposições da
Lei de Direitos Autorais do local do Publisher, na sua versão actual, e permissão para uso deve ser sempre obtido a partir de
Springer. As permissões para uso pode ser obtido através de RightsLink no Copyright Clearance Center. Violações são
susceptíveis de acção judicial nos termos da respectiva Lei de Direitos Autorais.
ISBN-13 (pbk): 978-1-4302-6424-8
ISBN-13 (eletrônico): 978-1-4302-6425-5
Nomes de marcas comerciais, os logotipos e as imagens podem aparecer neste livro. Ao invés de usar um símbolo de marca
registrada com todos os
ocorrência de um nome de marca registrada, logotipo ou imagem que usar os nomes, logótipos e imagens apenas de maneira
editorial
e em benefício do proprietário da marca registrada, sem nenhuma intenção de violação da marca registrada.
Te utilizar nesta publicação dos nomes comerciais, marcas comerciais, marcas de serviço e termos similares, mesmo que eles não
são identificados
como tal, não deve ser tomado como uma expressão de opinião quanto à possibilidade ou não sujeitos a direitos de propriedade.
Embora os conselhos e informações contidas neste livro são acreditados para ser verdadeiras e precisas na data de publicação,
nem
os autores nem os editores nem a editora pode aceitar qualquer responsabilidade legal por quaisquer erros ou omissões que
possam
ser feito. Publisher Te faz nenhuma garantia, expressa ou implícita, com relação ao material aqui contido.
Presidente e Editor: Paul Manning
Levar editor: Michelle Lowman
Avaliador Técnico: Chaim Krause
Editor de Desenvolvimento: Anne Marie Walker
Conselho Editorial: Steve Anglin, Mark Beckner, Ewan Buckingham, Gary Cornell, Louise Corrigan, Jim DeWolf,
Jonathan Gennick, Jonathan Hassell, Robert Hutchinson, Michelle Lowman, James Markham,
Matthew Moodie, Jeff Olson, Jeffrey Pepper, Douglas Pundick, Ben renow-Clarke, Dominic Shakeshaft,
Gwenan Spearing, Matt Wade, Steve Weiss
Coordenação de Edição: Kevin Shea
Copy Editor: Roger LeBlanc
Compositor: SPi global
Indexador: SPi global
Artista: SPi global
Cover Designer: Anna Ishchenko
Distribuída para o comércio de livros em todo o mundo por Springer Science + Business Media Nova York, 233 Spring Street,
6th Floor,
New York, NY 10013. Telefone para 1-800-Springer, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, ou
visite www.springeronline.com. Apress Media, LLC é uma California LLC eo único membro (proprietário) é Springer
Science + Business Media Finance Inc (SSBM Finanças Inc). SSBM Finanças Inc é uma corporação de Delaware.
Para obter informações sobre as traduções, envie um e-mail rights@apress.com, ou visite www.apress.com.
Apress e amigos de livros ED podem ser comprados em grandes quantidades para uso acadêmico, corporativo ou promocional.
eBook
Versões e licenças também estão disponíveis para a maioria dos títulos. Para mais informações, refira o nosso Especial massa de
Vendas-eBook
Licenciamento página web em www.apress.com/bulk-sales.
Qualquer código-fonte ou outro material suplementar referenciado pelo autor neste texto está disponível aos leitores em
www.apress.com/9781430265627. Para obter informações detalhadas sobre como localizar o código-fonte do seu livro,
ir para www.apress.com/source-code/~~V.

Para Becky e Reed


Tanque pela sua paciência e apoio quando eu desaparecer por horas, dias e semanas em um momento, a construção de tudo
a maneira das coisas off-the-wall e, em seguida, escrever sobre eles.

Conteúdo
Sobre o autor
xv
Sobre o Revisor Técnico
xvii
Agradecimentos
xix
Introdução
xxi
■ ■ Capítulo 1: Apresentando o Raspberry Pi
1
A História do Raspberry Pi
2
Explorando o Conselho Pi
4
O cartão SD
5
A porta de alimentação
5
A porta HDMI
5
As portas Ethernet e USB
6
O áudio e vídeo RCA Jacks
6
Os pinos GPIO
6
O Sistema em um Chip
6
Comparando Raspberry Pi para dispositivos semelhantes
7
Requisitos de hardware do Pi
7
Ligar a alimentação
7
Adição de um monitor
7
Adicionando um Hub USB
7
Usando um dongle USB sem fio
8
O sistema operacional Pi
9
Formatar o Cartão
10
Usando NOOBS
10
vii

■ Conteúdo
Ligação dos periféricos
10
Configurando o Pi
11
Desligando o Pi
13
Resumo
13
■ ■ Capítulo 2: Linux pelo assento de suas calças
15
Introdução ao Linux no Pi
16
Arquivos Linux eo sistema de arquivos
17
Usuário Root vs. sudo
17
Comandos
18
Exercício: Navegando no Sistema de Arquivos Linux
21
Escudos em Linux
22
Gerenciadores de pacotes
23
Editores de texto
24
Vim vs Emacs vs. nano
25
Resumo
29
■ ■ Capítulo 3: Apresentando Python
31
Scripting vs. uma linguagem de programação
31
O Python Filosofia
33
Introdução ao Python
34
Correr Python Usando IDLE
34
Correr Python Usando o Terminal
37
Correr Python usando scripts
38
Explorando os tipos de dados do Python
39
Programação com Python
44
IF testes
45
Loops
46
Funções
48
Objetos e Programação Orientada a Objetos
49
Resumo
50
viii

■ Conteúdo
■ ■ CAPÍTULO 4: Eletrônica a 100 MPH
51
Conceitos básicos de eletricidade
52
Ferramentas necessárias para Robótica
54
Chaves de fenda
54
Alicates e fio strippers
54
Cortadores de fio
55
Arquivos
56
Lupa Luz
56
Pistola de cola quente
57
Colas Assorted
57
Multímetro
57
Suprimentos de energia
58
Placa de ensaio
59
Faixa de poder
61
Ferro de solda
61
Regras gerais de segurança
62
Trabalhando com calor
62
Trabalhando com objetos pontiagudos
63
Usar óculos de segurança
63
Extintores no pronto
63
Mantenha um kit de primeiros socorros Handy
63
Trabalhar em uma área ventilada
64
Organizando seu local de trabalho
64
Bônus: Técnicas de solda
65
Resumo
66
■ ■ Capítulo 5: O Web Bot
67
Bot Etiquette
68
As conexões da Web
69
Web Protocolos de Comunicação
69
Formatos de página Web
69
A pedido Exemplo
70
ix

■ Conteúdo
Nosso conceito Web Bot
70
Analisando Páginas da Web
71
Codificação com módulos Python
72
Usando o módulo Mecanizar
72
Analisando com Beautiful Soup
73
Baixando com a urllib Biblioteca
73
Decidir o que fazer download
73
Escolher um ponto de partida
74
Armazenar seus arquivos
74
Escrevendo o Python Bot
74
Lendo uma String e extrair todos os links
75
Procurando por e download de arquivos
75
Testando o Bot
76
Criando diretórios e instanciar uma lista
77
O código final
79
Resumo
80
■ ■ Capítulo 6: A estação meteorológica
81
A Lista de Compras de Peças
82
Usando o protocolo de I2C
82
Usando um anemômetro
84
Construindo o anemômetro
84
Ligar o anemômetro para o Pi
87
Correlacionando rotações por segundo com velocidade do vento
88
Ligar o Compass Digital
90
Ligar a temperatura / umidade Sensor
92
Ligar o Barômetro
93
Ligação dos Bits
95
O código final
97
Resumo
100
x
■ Conteúdo
■ ■ Capítulo 7: O Media Server
101
A Lista de Compras de Peças
101
Usando uma unidade NTFS
101
Instalando o Samba
104
Configurando Samba
104
Definindo permissões do Linux
106
Fixação do Bug Apostrophe
107
Reiniciar o Serviço de Samba
107
Conectando com Linux / OS X
108
Onde está Python?
110
Resumo
110
■ ■ Capítulo 8: O sistema de segurança Home
111
Cães como Segurança
111
Raspberry Pi como Segurança
112
Usando uma rede de sensores
112
Compreendendo uma Pulldown Resistor
112
A Lista de Compras de Peças
113
Conectando-se a rede sem fio
113
Acessando os pinos GPIO
116
Configurar o sensor de movimento
118
Configurando o Interruptor de Lâmina
120
Configuração do interruptor de pressão
121
Ligar o Sensor Magnético
122
Configurando Câmara de Pi
123
Enviando uma mensagem de texto a partir do Pi
123
Implementando o Callback
124
Conectando todos os bits
124
O código final
125
Resumo
126
xi

■ Conteúdo
■ ■ Capítulo 9: The Toy Cat
127
A Lista de Compras de Peças
127
O conceito por trás da Toy
128
Criando e usando números aleatórios
129
Utilizando a biblioteca GPIO
130
Controlando o Servo
132
Construindo o Mecanismo Servo
134
Construindo o Mecanismo Laser
135
Ligar o laser para o Servo
136
Ligar o sensor de movimento
137
Conectando todos os bits
140
O código final
142
Resumo
143
■ ■ Capítulo 10: O Avião Rádio-Controlado
145
A Lista de Compras de Peças
145
Ligar o receptor GPS para o Pi
146
Configurando um arquivo de log
148
A formatação de um arquivo KML
149
Usando threading e Objetos
151
Configurar inicialização automática
152
Ligação dos Bits
153
O código final
157
O Programa plano
158
Programa de Conversão KML
159
Resumo
159
■ ■ Capítulo 11: The Weather Balloon
161
A Lista de Compras de Peças
161
Configuração do Receptor GPS
162
Armazenar os dados de GPS
164
xii

■ Conteúdo
Instalando PIME
164
Instalando festival
165
Instalando FFMPEG
165
Preparando o Pi
166
Usando threading e Objetos
167
Ligação dos Bits
167
Revendo os resultados Photo
170
O código final
171
Resumo
172
■ ■ Capítulo 12: O submersível
173
A Lista de Compras de Peças
174
Acessando pinos GPIO do Raspberry Pi
174
Instalando o Raspberry Pi Camera Board
176
Controlar o Sub
178
Anexando o Adaptador Wiichuck
179
Ativando I2C do Pi
180
Testando o Nunchuk
181
Leitura desde o Nunchuk
182
Controlar os Motors Sub Câmara e com o Nunchuk
185
Iniciando o Programa remotamente
187
O Programa de Controle de final
189
O código final
189
Construindo o Sub
191
Construindo o quadro
192
Criação do gabinete do Pi
192
Impermeabilização de Caixas de motor
193
Conexão do Nunchuck
196
Montagem do produto final
196
Resumo
200
xiii

■ Conteúdo
■ ■ Capítulo 13: A Gertboard
201
Examinando o Conselho
201
Os pinos GPIO
202
Atmega Chip
203
A-para-D e D-para-um Conversores
204
I Secção / O
205
O Controlador de Motor
206
Open Collector driver
207
Saltadores
208
Alguns projetos de exemplo
209
Configurando o programa de configuração preliminar Jumper
209
Fazendo Alguns LEDs Blink
210
Experiências com Motor Controllers
212
Utilização dos drivers open collector
213
Usando os conversores digitais / analógicos
213
Resumo
214
■ ■ Capítulo 14: O Raspberry Pi eo Arduino
215
Explorando o Arduino
215
Instalando o Arduino IDE sobre o Pi
218
Executando um Servo
223
O Arduino ea Gertboard
224
Resumo
225
Índice
227
xiv

Sobre o autor
Wolfram Donat é tallish, com cabelo e quatro membros ligados em aproximadamente
os locais corretos. Ele é um engenheiro de computação, escritor e programador, com
interesses em robótica, animatronics, automação e sistemas embarcados. Ele escreveu
seu primeiro programa básico em um Commodore VIC-20, há mais anos do que se importa
Admitir.
Ele atualmente vive em Anchorage, Alaska, com sua esposa, filho, e zoológico
de animais.
xv
Sobre o Revisor Técnico
Chaim Krause vive actualmente em Leavenworth, Kansas, onde o Exército dos EUA
emprega-lo como um especialista Simulation. Em seu tempo livre, ele gosta de jogar PC
jogos e, ocasionalmente, desenvolve a sua própria. Ele assumiu recentemente o esporte de
golf para passar mais tempo com seu outro significativo, Ivana. Embora ele segura
bacharelado em Ciência Política pela Universidade de Chicago, Chaim é um autodidata
quando se trata de computadores, programação e eletrônica. Ele escreveu seu primeiro
jogo de computador em BASIC em um Tandy Modelo I Nível I e armazenado o programa em
uma fita cassete. Rádio amador apresentou-o a eletrônica, enquanto o Arduino
e o Raspberry Pi fornecido um meio de combinar computação, programação,
e eletrônica em um hobby.
xvii

Agradecimentos
Escrever um livro pode ser um processo solitário, mas certamente não pode ser feito sem ajuda. Um monte de trabalho por um
monte de gente
entrou nesta empresa, e todos eles têm o meu mais profundo agradecimento. Meus agradecimentos a Kevin para manter as coisas
em movimento
sem problemas, para Anne Marie para descobrir o que eu estava tentando dizer, e Roger LeBlanc para fazer com que pareça que
eu sei
o que estou fazendo. Tanques para Chaim, o revisor tecnologia, para ter certeza que as coisas que eu escrevi realmente executa e
faz o que é
suposto. E, graças à Michelle, para tomar conhecimento de mim em primeiro lugar.
Por último, mas não menos importante, graças à Becky e Reed. Tis seu para você.
xix

Vous aimerez peut-être aussi