Escolar Documentos
Profissional Documentos
Cultura Documentos
Os programas, exemplos e aplicações apresentadas neste livro foram incluídas por seu valor
instrutivo. As ofertas autor nenhuma garantia implícita ou expressa, incluindo, mas não se
limitando a garantias implícitas de adequação ou comerciabilidade para qualquer finalidade
específica e não aceita qualquer responsabilidade por qualquer perda ou dano decorrente do
uso de qualquer informação neste livro, ou qualquer erro ou omissão dessas informações, ou
qualquer uso incorreto desses programas, procedimentos e aplicações.
Nenhuma parte desta publicação pode ser reproduzida, armazenada num sistema de
recuperação, ou transmitido em qualquer forma ou por qualquer meio, electrónico,
mecânico, de gravação, ou de outra forma, sem a prévia escrita do autor.
Conteúdo
introdução
Disclaimer
Configurando ESP8266
Execução de comandos através de uma interface serial O manuseio do
Este livro descreve os princípios básicos da programação de aplicações Wi-Fi sem fio com base em quadros de
ESP8266-compatíveis usando uma linguagem de programação MicroPython. MicroPython é uma implementação magra e eficiente
do Python 3 e inclui um pequeno subconjunto da biblioteca padrão do Python. MicroPython é otimizado para ser executado na
maioria dos microcontroladores populares (ATSAMD21, STM32, esp8266, etc.) e em ambientes restritos.
MicroPython está repleto de funcionalidades avançadas, tais como um alerta, inteiros de precisão arbitrária, fechos, compreensão da lista,
geradores, tratamento de exceção interativo e muito mais. No entanto, é bastante compacto para ajuste e executar dentro de apenas 256k de
espaço de código e 16k de memória RAM. objetivos MicroPython ser tão compatível com Python normal quanto possível para que você possa
transferir código com facilidade a partir do desktop para um microcontrolador ou sistema embarcado.
O livro contém vários projetos de sistemas de medição e controlo sem fios simples. Cada projeto é acompanhado por uma
descrição breve que ajuda a tornar as coisas claras. Todos os projetos descritos neste manual pode ser facilmente melhorado
ou modificado se necessário.
Todas as aplicações sem fio foram construídos e testados no PC desktop rodando Linux (Ubuntu 16.04) e um 1,0
(ESP-12E) bordo nodemcu equipado com esp8266 CPU. O código-fonte de aplicações foi desenvolvido em Python 3 e
MicroPython.
aviso Legal
As técnicas de projeto descritos neste livro foram testadas na nodemcu 1,0 (ESP-12E), sem danos do equipamento. Eu não vou
aceitar qualquer responsabilidade por danos de qualquer espécie devido a ações tomadas por você depois de ler este livro.
Configurando ESP8266
Antes de utilizar um ESP8266 devemos configurar o seu firmware. Depois que o módulo ESP8266 foi conectado a uma
porta USB do PC, uma interface serial é atribuído à placa. Podemos facilmente verificar isso digitando o seguinte comando
CRW-rw ---- uma raiz dialout 188, 0 гру 25 10:43 / dev / ttyUSB0
Neste caso particular, o nosso ESP8266 pensão (nodemcu) está associado a um dev / dispositivo / ttyUSB0. Este
dispositivo será usado ao configurar nosso conselho para operar no ambiente MicroPython.
Em primeiro lugar, apagar a memória flash placa ESP8266 usando o esptool.py utilitário que deve ser previamente instalado no
Linux. A sequência de comando apaga o flash, produzindo a saída mostrada abaixo:
Não foi possível conectar. [<Class '__main __ FatalError'>; Excedeu a aguardar cabeçalho do pacote]. Tentando novamente ...
Depois de apagar estiver concluída, podemos escrever o intérprete MicroPython em uma memória flash de esp8266. Para fazer
isso, devemos baixar a imagem estável MicroPython mais recente para ESP8266 de http://microbit.org/download . O firmware
para ESP8266 pode ser encontrada na seção “Firmware para esp8266 boards”. No meu caso, este foi o arquivo esp8266-20161110-v1.8.6.
Em seguida, implantar o novo firmware usando o esptool.py comando como é mostrado abaixo: $ esptool.py --port / dev /
$ Esptool.py --port / dev / ttyUSB0 --baud 460.800 write_flash --flash_size = detectar 0 esp8266- 20161110-v1.8.6.bin
esptool.py v1.3-dev Conectando ...
Não foi possível conectar. [<Class '__main __ FatalError'>; Excedeu a aguardar cabeçalho do pacote].
Tentando novamente ...
tamanho do Flash detectada automaticamente:
32m Correndo Cesanta pisca-pisca toco ...
flash parâmetros definido para 0x0040
Escreveu 569344 bytes em 0x0 em 12,6 segundos (362,3 kbit / s) ... Deixando ...
Após as etapas acima sucedido, podemos acessar o ambiente MicroPython na placa nodemcu usando um comando
REPL pronta.
Execução de comandos através de uma interface serial
A maneira mais fácil de testar um código e executar comandos é usar o REPL (Leia Avaliar Imprimir Loop). REPL é o
MicroPython interativo pronta usado para interagir com uma placa esp8266. Para acessar o REPL podemos usar um
interface serial UART ou Wi-Fi. O REPL está sempre disponível na interface serial UART0 que utiliza pinos GPIO1 ( TX) e
GPIO3 ( RX). A taxa de transmissão do REPL é 115200. Se uma placa esp8266 tem uma interface USB-to-UART como no caso
de nodemcu, então seremos capazes de acessar a REPL directamente a partir do PC. Caso contrário, você precisará ter uma
forma de comunicar com o UART. Para acessar o mais necessidade que prompt de USB-serial usar algum programa emulador de
terminal. No Windows, TeraTerm é uma boa escolha, no Mac, podemos usar o built-in tela programa e Linux podemos usar picocom,
minicom ou tela. Neste guia, usará o tela utilidade.
Uma vez que a ligação através da porta serial é estabelecida, podemos testá-lo premindo Entrar algumas vezes até que o
MicroPython REPL linha (>>>) aparece.
O exemplo a seguir ilustra como executar um script simples que alterna o on-board LED no pino GPIO16 do
conselho nodemcu.
Podemos executar até mesmo scripts mais complicados do REPL alerta, mas seria muito melhor ter a capacidade de
criar, editar, salvar e executar scripts MicroPython diretamente na placa esp8266. Para fazer isso, precisamos usar
qualquer um dos poucos utilitários descritos na seção seguinte.
Manipulação do sistema de arquivos na placa ESP8266
A fim de manipular arquivos localizados na placa ESP8266, devemos saber como o MicroPython controla um sistema de arquivos.
Digitando um código dentro do REPL série seria adequado quando precisamos executar pequenos scripts. Desenvolvimento e execução de
programas complexos podem exigir outras ferramentas. MicroPython tem um sistema de arquivo interno que pode armazenar o código que é
executado sempre que os poderes do conselho para cima. Neste guia, vamos usar a ferramenta Adafruit MicroPython ( ampy) para carregar arquivos
e executar um código MicroPython em uma placa de esp8266.
Nota que todas as placas ESP8266 compatíveis reservar apenas uma pequena parte de sua memória flash interna para o sistema de
arquivos. o ampy utilitário pode ser baixado a partir https://github.com/adafruit/ampy . ampy Não é a única ferramenta para manipular arquivos
e muito mais em uma placa de MicroPython, existem várias outras ferramentas descritas no site da Adafruit www.adafruit.com . Eles estão
listados abaixo:
ESP8266 WebREPL - Para as placas baseadas em ESP8266 o WebREPL fornece uma interface web básico para
upload de arquivos para o conselho. Isso é útil para soltar um arquivo em uma placa, mas exige estar conectado
à WebREPL que pode não ser sempre conveniente.
rshell - um controle remoto ferramenta MicroPython shell que lhe permite acessar os arquivos e mais de uma placa de
MicroPython ligados através de sua conexão serial / USB.
mpfshell - semelhante ao rshell e fornece acesso a arquivos e REPL em um shell específico da MicroPython. No entanto, mpfshell
é feito especificamente para apoiar as placas baseadas em ESP8266 e do conselho WiPy.
Este guia utiliza ampy porque é uma ferramenta de linha de comando multi-plataforma simples que fornece a funcionalidade apenas o suficiente
para o acesso ao sistema de arquivos de um MicroPython sem ser demasiado complexa. Esteja ciente que ampy não suporta a falar com um
placas sem uma conexão REPL série / USB.
Nota que antes de usar uma ferramenta como ampy para placas baseadas em ESP8266, que talvez seja necessário desativar a depuração
saída na placa. Se você estiver usando uma compilação de lançamento oficial do MicroPython (isto é, que termina em uma versão simples como
1.8.6 em vez de uma compilação diária mais complexo como 1.8.6-xx-xxxxxxxx) saída de depuração já está desativado e você não faz precisa fazer
nada extra. No entanto, se você estiver usando uma compilação diária ou compilação personalizado a partir da fonte que você precisa para saída de
depuração desativar que pode confundir ferramentas como ampy.
Para desativar a saída de depuração em ESP8266, devemos estabelecer a conexão com o ESP8266 através de um REPL série e
esp.osdebug (Nenhum)
o esp.osdebug () função retorna nenhuma saída. Depois de executar a saída do comando de depuração não será impressa no terminal serial
e podemos usar ferramentas como ampy.
É altamente recomendável adicionar o acima duas linhas para os do conselho boot.py arquivo para saída de depuração é desativado
permanentemente. Se você não fizer essa alteração, você precisará de saída de depuração desativar manualmente cada vez que você reiniciar a
placa! Com ampy podemos tomar um código MicroPython escrito no PC e executá-lo em uma placa de MicroPython conectado. Isto dá-nos um fluxo
de trabalho simples para explorar MicroPython. Podemos escrever um código no PC em algum editor de texto, em seguida, invocar ampy com o corre
Para usar o corre comando, devemos apenas especificar um caminho para um arquivo Python no PC. o ampy
vontade programa
enviar o arquivo para a placa, esperar por ele para concluir a execução, e imprimir qualquer saída do programa. Por exemplo, vamos
colocar a seguinte impressão de código MicroPython ( 'Olá mundo Eu posso contar a 10:') for i in range (1,11):
imprimir (i) no arquivo test.py no PC. Para executar o código dentro deste arquivo no conectado ESP8266 bordo,
devemos abrir a janela de terminal no diretório onde test.py reside e digite o comando:
onde / porta / série é o caminho ou o nome da porta de série ligado à placa MicroPython. No nosso caso, este será / dev /
ttyUSB0. Se você não quiser especificar constantemente a - porta opção, você pode definir o AMPY_PORT
variável de ambiente em sua sessão de terminal. o ampy utilidade vai usar esta variável para ligar a porta série do bordo. Esteja ciente de
que o corre comando não é uma concha ou uma ferramenta que permite que você envie a entrada do seu computador para o conselho!
Se você precisa enviar entrada, você vai querer se conectar à placa e usar a sua REPL serial. Por padrão, o corre comando irá aguardar o
script para concluir a execução na placa antes de imprimir sua saída. Em alguns casos, você não quer esse comportamento, por
exemplo, se o seu script tem um loop principal ou infinito que nunca retorna. Neste caso, adicionar o - sem-saída opção para o corre comando.
Este sinalizador informa ampy não esperar por qualquer saída e simplesmente começar a executar o script e retorno. O exemplo seguinte
tempo de importação
imprimir ( 'Counting ...')
i=1
while True:
imprimir (i)
+i=1
time.sleep (1,0) # Atraso durante 1 segundo.
Salve o código acima MicroPython na test.py arquivo e executar o aplicativo com o - sem-saída
opção como é mostrado abaixo:
$ Ampy --port / série / porta de execução --no-saída test.py A ampy utilitário também pode ser usado
para upload de arquivos para o ESP8266: $ ampy --port / dev / ttyUSB0 blinky.py colocá
Quando precisamos de substituir um arquivo que já existe no ESP8266 (por exemplo, main.py) com algum arquivo (por exemplo, main1.py)
podemos usar o seguinte comando: $ ampy --port / dev / ttyUSB0 colocar /main.py main1.py Para visualizar os arquivos no esp8266
Nós também pode baixar o conteúdo do arquivo da placa em algum arquivo no PC. O comando a seguir grava o
conteúdo do arquivo main.py na ESP8266 no arquivo main1.py que será criado no diretório atual:
$ Ampy --port / dev / ttyUSB0 get main.py> main1.py A rm comando permite remover um
A lista de opções suportadas pela ampy utilitário pode ser obtido utilizando a opção de ajuda:
$ Ampy --help
Uso: ampy [opções] comando [ARGS] ... ampy - Adafruit
MicroPython Ferramenta
ampy é uma ferramenta para controlar placas MicroPython através de uma conexão serial. Usando ampy
você pode manipular arquivos no sistema de arquivos interno do conselho e scripts do mesmo executados.
opções:
- p, --port porta Nome da porta serial por placa conectado. Pode, opcionalmente,
especificar com variável de ambiente AMPY_PORT. [requeridos]
- b, --baud taxa de transmissão de bits para a ligação em série (padrão 115200). Pode,
opcionalmente, especificar com variável de ambiente AMPY_BAUD.
Comandos: get
WebREPL permite que você use o prompt Python através de Wi-Fi para estabelecer a conexão com a placa ESP8266 através de um
navegador da Web (as versões mais recentes do Firefox e Chrome são suportados).
Para sua conveniência, o cliente WebREPL está hospedado no http://micropython.org/webrepl . Alternativamente, você
pode instalá-lo localmente a partir do repositório GitHub https://github.com/micropython/webrepl .
Antes de conectar a WebREPL, você deve definir uma senha e ativar a interface através de uma conexão serial normal. As versões
iniciais de MicroPython para ESP8266 veio com WebREPL habilitado automaticamente na inicialização e com a capacidade de
definir uma senha via Wi-Fi na primeira ligação, mas como WebREPL estava se tornando mais amplamente conhecido e popular, a
configuração inicial mudou para um fio conexão para melhorar a segurança.
Depois de ter ligado para o conselho ESP8266 através de uma interface serial, digite o comando:
Em seguida, deve seguir as instruções na tela e instruções. Por exemplo, no Ubuntu 16.04, podemos ver a seguinte
sequência:
Gostaria de (E) nable ou (D) Isable-lo funcionando na inicialização? (Linha vazio para
parar)
> E
Para habilitar WebREPL, você deve definir a senha para ele New
password: password 1234 Confirme: 1234
Depois de premir “ y ”O conselho vai ser reposto. Vamos obter algo semelhante a:
>>>
WebREPL daemon começou no ws: //192.168.4.1: 8266 webrepl iniciado
no modo normal poderia arquivo não aberto 'main.py' para leitura
Para verificar as interfaces de rede, podemos executar a seguinte seqüência digitado na REPL:
Vê-se que a placa ESP8266 é configurado como um ponto de acesso (AP) com um endereço IP
192.168.4.1 (por padrão). A maioria das configurações (incluindo o meu) usa um autônomo router Wi-Fi configurado AP, enquanto os
outros nós são configurados como estações. Por essa razão, eu reconfigurado ESP8266 para operar como uma estação.
Em tal configuração, o ESP8266 recebe o endereço IP do servidor DHCP rodando em um roteador Wi-Fi (TP-LINK, no meu
caso). A sequência seguinte digitado na REPL foi usado para configurar ESP8266 como uma estação de Wi-Fi:
>>> sta_if.isconnected ()
Verdadeiro
> > > sta_if.ifconfig ()
( '192.168.0.107', '255.255.255.0', '192.168.0.1', '192.168.0.1')
>>>
O último comando, sta_if.ifconfig (), dá-lhe a informação sobre a rede, onde uma placa ESP8266 está
conectado.
Na minha configuração, o endereço IP da estação ESP8266 (192.168.0.107) é retirada de uma piscina reservada de endereços IP
determinados para o servidor DHCP. Usando o desenvolvimento de um endereço IP predeterminado simplifica de aplicações sem fio,
uma vez que o programa não precisa fazer a varredura de uma rede.
Nós podemos facilmente testar se uma interface de rede em ESP8266 é ativado executando um utilitário padrão Linux chamada ping. o sibilo
comando verifica se o nó de rede de destino pode ser alcançado através do envio dos pacotes ICMP. No nosso caso, depois de configurar
ESP8266 podemos testar sua interface de rede da seguinte forma: $ ping 192.168.0.107
Duas configurações (um AP e a estação) descritos acima pode ser utilizado para lançar WebREPL. Para testar WebREPL, devemos
lançar digite o seguinte URL em um navegador da Web:
http://micropython.org/webrepl/
Depois WebREPL foi lançado ( Figura 1), devemos introduza o endereço IP de ESP8266 (192.168.0.107, no nosso caso),
deixando a porta (8266) inalterada. Quando terminar, pressione “ Conectar ”.
Figura 1
Se a conexão tiver êxito, devemos ver uma solicitação de senha ( Figura 2).
Figura 2
Uma vez que tenha digitado a senha, pressione Entrar mais uma vez para obter um prompt “>>>” ( Fig.3).
Fig.3
Agora você pode começar a digitar comandos MicroPython como é mostrado na figura acima. Para desconectar-se de WebREPL, você pode
pressionar a tecla “ desconectar ”Botão ( Fig.4).
Fig.4
Para estabelecer automaticamente a ligação à nossa rede Wi-Fi, podemos usar a seguinte função ( Listagem 1): Lista 1.
placa esp8266. O exemplo prático do código-fonte para ligar para minha casa rede Wi-Fi é apresentado na
Listagem 2. Este código é colocado no main.py arquivo que é executado após boot.py termina.
Listagem 2.
rede de importação
sta_if = network.WLAN (network.STA_IF) ap_if =
network.WLAN (network.AP_IF)
ap_if.active (False)
se não sta_if.isconnected ():
sta_if.active (True)
sta_if.connect ( 'TP-LINK_77D8', 'password') # conectar a minha rede Wi-Fi No meu caso particular, uma
As seções seguintes descrevem os conceitos básicos de construção de vários sistemas de rede sem fio para medição e
controle usando a placa ESP8266 (nodemcu).
Programação sistemas de rede sem fio com ESP8266
Pode haver uma série de métodos para sistemas de medição de configurar e programa de rede Wi-Fi. Geralmente, as aplicações de
rede sem fio usar a configuração “cliente-servidor”, que é amplamente utilizado em redes com fio.
Quando executado, o aplicativo de rede pode funcionar como um "servidor" ou como um "cliente". Muitas vezes, um aplicativo de rede é
desenvolvida para operar em ambos os modos, dependendo de algumas condições pré-determinadas. O diagrama de blocos na Fig.5 ilustra
a configuração básica “cliente-servidor".
Fig.5
Aqui você pode ver uma interação entre três aplicações de rede (um servidor TCP e dois clientes TCP). O servidor TCP é atribuído
o endereço IP 192.168.0.100 e porta 8089 - esses parâmetros da rede são usadas para esperando para receber os pedidos de
clientes TCP. Vamos supor que o TCP Cliente 1 em execução em algumas tentativas de nó de rede para se conectar ao TCP
Server em execução no outro nó. Inicialmente, os TCP Cliente 1 coloca uma solicitação para o servidor TCP utilizando os
parâmetros básicos de rede (192.168.0.100: 8089). O TCP Server descobre este pedido e cria uma conexão de trabalho ( “socket
Mais uma vez, quando o TCP Cliente conexão 2 estabelece que o TCP Server, a nova conexão de trabalho com um endereço IP
192.168.0.100 e porta 48344 é criado. Nota, que o "socket de escuta" usando a porta 8089 do TCP Server serve apenas para
estabelecer a comunicação entre os clientes TCP Server e TCP. Esta tomada só escuta para solicitações de entrada de clientes
TCP e as forças do TCP Server para criar uma nova conexão de trabalho, se necessário. Quando o TCP Server termina ele tem
que fechar o socket "escuta". Uma vez que um canal de comunicação foi criado, os dados podem ser transferidos em ambas as
direções entre um servidor TCP e TCP Cliente Isso depende principalmente em um algoritmo de controle.
Ao projetar o sistema de rede Wi-Fi mais simples, precisamos de pelo menos um servidor TCP e um TCP Cliente. Neste
caso, uma placa Wi-Fi pode ser “TCP Server” ou “TCP Client”. Em configurações mais complicadas, o código de programa
em execução na placa Wi-Fi pode executar tanto TCP servidor e cliente TCP.
Neste guia, vamos considerar as configurações mais simples, onde placas Wi-Fi será executado apenas um servidor TCP ou TCP
cliente de cada vez.
As seções seguintes descrevem projetos práticos de sistemas de medição e controlo sem fios simples.
Condução saídas digitais: projeto 1
Este projeto ilustra a concepção de um sistema de controle sem fio simples que irá conduzir GPIO5 e
GPIO16 pins de nodemcu ON / OFF do PC. Neste sistema, o aplicativo de servidor TCP está em execução no ESP8266 bordo
remoto, enquanto um cliente TCP está em execução no PC. o GPIO16 pin impulsiona o LED on-board que está ligado a + 3.3V
através de um resistor pull-up. o
GPIO5 pino acciona o diodo emissor de luz ligado a ESP8266 através da resistência R1 como é mostrado na Fig.6.
Fig.6
tempo de importação
tomada importação
rede de importação
máquina de importação
True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8')
sParam = sASCII.split (' ') se sParam [0] == 'GPOUT':
Coloca o nodemcu em modo “estação” e estabelece a ligação à rede Wi-Fi. Uma vez que a placa está ligado ao
Wi-Fi, a interface de rede de nodemcu é atribuído o endereço IP
192.168.0.107. Este endereço será utilizado para configurar o TCP Server. A sequência
cria o objeto servidor socket serverSocket associado ao servidor O TCP IP-address 192.1168.0.107 e porta 55000. vai
esperar para receber os pedidos (max = 5) neste socket. As solicitações do cliente são processados na interminável enquanto
ciclo. Após a conexão do cliente é
aceito, o novo “trabalho” socket é criado pelo comando: clientSocket, addr
= serverSocket.accept ()
Todas as operações com o cliente será então realizada utilizando o clientSocket socket. No nosso caso, o clientSocket recebe a
seqüência de comandos a partir do cliente TCP e salva os dados na variável de seqüência aASCII:
sRecv = clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8') A sequência que se segue analisa o sASCII corda, determina o pino
de unidade (o PIN variável), em seguida, determina o valor de escrever para este pino (o val variável). O pino de accionamento é mantida
no conduziu
variável. Finalmente, o valor val será escrito para o pino pela led.value () função.
Listagem 4.
Para configurar o nosso sistema, devemos baixar o código fonte de um servidor TCP em ESP8266 usando o ampy utilitário:
$ Ampy --port / dev / ttyUSB0 colocar TCPServer.py /main.py No comando acima, o arquivo TCPServer.py contém o
placa esp8266.
GPIO16 está ligado ao LED on-board com um resistor pull-up e GPIO5 está ligado ao nosso LED (ver Fig.6). Para conduzir
os dois pinos ON / OFF podemos usar os seguintes comandos em execução no comando Ubuntu prompt: $ python
TCPClient.py GPOUT 5 1 eco recebido: GPOUT 5 1 $ python TCPClient.py GPOUT 16 0 eco recebido: GPOUT 16 0 $
python TCPClient.py GPOUT 5 0 eco recebido: GPOUT 5 0 $ python TCPClient.py GPOUT 16 1 eco recebido: GPOUT
16 1
Nota que o LED no pino GPIO16 é ON quando o pino é baixo e OFF quando GPIO16 é alto.
Condução saídas digitais: Projeto 2
Neste projeto, o TCP Server é lançado em ESP8266 pela ampy utilidade. o main.py arquivo no diretório raiz do ESP8266
deve conter apenas o código para inicializar interface de Wi-Fi ( Listagem 5).
Listagem 5.
rede de importação
soquete importação
máquina importação
Host = '192.168.0.107' =
55000 porta
# ligam-se à porta
serverSocket.bind ((host, port))
while True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8')
sParam = sASCII.split (' ') se sParam [0] == 'GPOUT':
Depois de guardar o código de cima no TCPServer.py arquivo, o aplicativo pode ser lançado na placa ESP8266 invocando
O código-fonte do TCP cliente é a mesma que no projeto anterior. Nota que depois de sair da aplicação TCP Server
(pressionando Ctrl-C), você deve reiniciar a placa esp8266 antes de executar a mesma aplicação mais uma vez. Caso
contrário, você vai ter uma EADDRINUSE
mensagem de erro tal como é mostrado abaixo:
Abortado!
. . .
Este projecto ilustra a configuração do ciclo de serviço de um sinal PWM no pino GPIO5 do conselho esp8266.
O código-fonte MicroPython do TCP Server que será executado em ESP8266 é mostrado na Listagem 7. Listagem 7.
(2)
pwm5 = PWM (pino (5), freq = 500, dever = 512)
# ligam-se à porta
serverSocket.bind ((host, port))
True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8')
sParam = sASCII.split (' ') se sParam [0] == 'PWM':
pwmPin = int (sParam [1])
dutycycle = int (sParam [2])
pwm5 = PWM (Pin (pwmPin), freq = 500, dever = dutycycle)
clientSocket.send (sRecv) clientSocket.close ()
cria o objeto servidor socket serverSocket associado ao servidor O TCP IP-address 192.1168.0.107 e porta
55000. vai esperar para receber os pedidos (max = 5) neste ( “escuta”) socket.
As solicitações do cliente são processados na interminável enquanto ciclo. Após a conexão do cliente for aceite, o
Todas as operações com o cliente será então realizada utilizando o clientSocket socket. No nosso caso, o clientSocket recebe a
seqüência de comandos a partir do cliente TCP e salva os dados na variável de seqüência aASCII:
sRecv = clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8') A sequência que se segue analisa o sASCII corda,
variável), em seguida, determina o ciclo de serviço para ser escrito para este pino (o dutycycle variável). o
pino de accionamento é mantida no pwm5 variável. Finalmente, o valor de dutycycle será escrito para o pino chamando o PWM
O código-fonte Python da aplicação TCP Cliente em execução no Ubuntu é mostrado na Listagem 8. Listagem 8.
Este projecto ilustra a medição de um sinal analógico no pino A0 de ESP8266 e transferir os dados obtidos para um cliente TCP
remoto. Para testar uma aplicação, utilizamos o circuito mostrado nas Fig.7.
Fig.7
Neste circuito, o sinal analógico no pino A0 é simulada pelo divisor de tensão dispostas usando resistência R1 e R2
potenciómetro. Note-se que a tensão analógica no pino A0 de esp8266 não deve ser superior a 1,0 V!
Lista 9.
# ligam-se à porta
serverSocket.bind ((host, port))
True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (128) .decode ( 'UTF-8') se sRecv ==
'ADC0':
Dn = adc.read () vin
= LSB * Dn
Svin =. "{:} .3f" formato (vin) else:
Neste código fonte, o código binário correspondente à tensão de entrada analógica no pino A0 é tomada pelo adc.read () comando
O valor do código é salvo no Dn variável. A tensão real é representada como um valor flutuador e é mantido no vin variável. A
corda Svin contém a representação de texto vin. Essa seqüência é então enviada para a remota TCP cliente chamando o
clientSocket.send (Svin) função. O código-fonte Python de um cliente TCP ( TCPClient.py) em execução no PC é mostrada na Listage
10.
Listagem 10.
Esta é uma versão modificada do projeto anterior. Aqui o aplicativo é executado servidor TCP no PC, enquanto o
aplicativo TCP Cliente correndo na placa ESP8266 mede periodicamente a tensão analógica no pino A0 e envia o
resultado para o servidor TCP remoto. O código-fonte MicroPython do cliente TCP correndo na placa ESP8266 é
mostrado na
Listagem 11.
Listagem 11.
Neste código-fonte, o código do programa dentro de um enquanto() ciclo repete-se até um contador cnt alcances
15.
Este código pode ser inserido no main.py arquivo para executar enquanto ESP8266 é ligado ou reiniciado. Neste exemplo, o código
acima é colocado no TCPClient.py arquivo e começa a correr na placa ESP8266 usando a ampy comando:
tomada de importação
# ligam-se à porta
serverSocket.bind ((host, port))
while True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (256) clientSocket.close () print
(sRecv.decode ( 'utf8')), exceto KeyboardInterrupt:
serverSocket.close ()
imprimir ( 'TCP Server está sendo desligado ...')
TCPServer.py
Servidor TCP espera para receber os pedidos em 192.168.0.100:55000 ... 1: tensão no
pino A0, V = 0,135 2: tensão no pino A0, V = 0,168 3: tensão no pino A0, V = 0,873 4:
tensão no pino A0, V = 0,725 5: tensão no pino A0, V = 0,738 6: tensão no pino A0, V =
0,206 7: tensão no pino A0, V = 0,200 8: tensão no pino A0, V = 0,429
9: tensão no pino A0, V = 0,487 10:
tensão no pino A0, V = 0,503 11: tensão
no pino A0, V = 0,699 12: tensão no pino
A0, V = 0,960 13: tensão no pino A0, V =
0,951 14: tensão no pino A0, V = 0,970
15: tensão no pino A0, V = 0,983
Lendo os sinais analógicos usando um servidor Web
Este projecto ilustra a medição da tensão de entrada analógica no pino A0 de ESP8266 usando um simples servidor HTTP (Web) em
execução no tabuleiro. Podemos ler o valor de um sinal de entrada analógico, inserindo um par endereço IP / porta no campo de endereço
do navegador da Web em execução em algum lugar em uma rede.
Nessas configurações, a placa Wi-Fi funciona um servidor Web (HTTP), que é um caso especial de um servidor TCP, porque um protocolo HTTP é
baseado em um conjunto de protocolos TCP. Um navegador da Web (Google Chrome, no nosso exemplo) vai enviar / receber dados de / para um
servidor HTTP. Na verdade, um navegador da Web é um cliente TCP que envia pedidos baseados em especificações do protocolo HTTP para o
servidor HTTP. Usando um navegador da Web economiza muito tempo, especialmente em sistemas sem fio simples, uma vez que não precisa
escrever qualquer código fonte do cliente mais.
Nós não irá considerar o protocolo HTTP em profundidade; você pode encontrar vários documentos, literatura e tutoriais sobre
este assunto na Internet. Nós só irá discutir aspectos práticos da concepção de "Web (HTTP) - navegador Web" sistemas sem
fio de rede usando nodemcu eo PC. Uma configuração de rede muito simples é mostrada na Fig.8.
Fig.8
No acima configuração de rede Wi-Fi, o conselho nodemcu Wi-Fi funciona um servidor Web (HTTP), enquanto o PC desktop /
notebook executa o navegador Web. O código-fonte MicroPython do HTTP Server é mostrado na Listagem 13. Listagem 13.
# Prepare a resposta
response = 'HTTP / 1.1 200 OK \ r \ nContent-Type: text / html \ r \ n \ r \ n' <! DOCTYPE
html> resposta + = "" "<html> <body>
$ Ampy --port / dev / ttyUSB0 executar HTTPServer.py Para ler a entrada A0 na ESP8266 bordo remoto, devemos entrar
Alternativamente, podemos colocar o código fonte do Servidor HTTP no main.py arquivo e gravar o arquivo na memória
flash de esp8266. Neste caso, o código fonte MicroPython do main.py
arquivo na placa ESP8266 será parecido com o seguinte ( Listagem 14). Listagem 14.
'192.168.0.107', 8081)
socketServidor = socket.socket (socket.AF_INET, socket.SOCK_STREAM) serverSocket.bind (addr)
# Prepare a resposta
response = 'HTTP / 1.1 200 OK \ r \ nContent-Type: text / html \ r \ n \ r \ n' <! DOCTYPE
html> resposta + = "" "<html> <body>
Para reescrever a main.py arquivo no diretório raiz do ESP8266, podemos usar o ampy utilidade como é mostrado abaixo:
$ Ampy --port / dev / ttyUSB0 colocar HTTPServer.py /main.py Após reset, o servidor
Este projeto ilustra como ler sinais digitais nos pinos de entrada do conselho esp8266. Neste sistema, a aplicação
TCP Server é executado no nodemcu. O servidor lê pins GPIO5 ( “5”),
GPIO4 ( “4”) e GPIO0 ( “0”) configurado como entradas digitais com resistências pull-up. Para testar esta aplicação, que pode alimentar
sinais digitais para esses pinos como é mostrado na Fig.10.
Fig.10
pinNum = [5,4,0]
# ligam-se à porta
serverSocket.bind ((host, port))
True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (128) sASCII = sRecv.decode ( 'UTF-8')
se sASCII == 'GPIN':
S1 = ''
para i no intervalo (0,3): estado [i] =
pinos [i] .value () s1 + = str (estado
[i])
clientSocket.send (s1.encode ( 'utf8')) clientSocket.close () Salvar este código-fonte em TCPServer.py e reescrever o main.py
arquivo no diretório raiz do sistema de arquivos usando o MicroPython ampy utilitário: $ ampy --port / dev / ttyUSB0 colocar
TCPServer.py /main.py Para iniciar o aplicativo, você deve reiniciar a placa esp8266.
O código-fonte Python da aplicação cliente TCP em execução no PC é mostrada na Listagem 16. Listagem 16.
comando e saída produzida pela aplicação TCP Cliente é mostrado abaixo (o TCP Server em esp8266 já deve estar em
Neste projeto, a leitura das entradas digitais 5-4-0 do conselho esp8266 é realizada por um cliente TCP que periodicamente (a cada
5 s) envia dados obtidos a um TCP Server em execução no PC com um endereço IP 192.168.0.100. O servidor aguarda TCP para
solicitações de entrada na porta 55000. O Python código-fonte do TCP Server ( TCPServer.py) é mostrada em Listagem 17.
Listagem 17.
tomada de importação
# criar um objeto de soquete
socketServidor = socket.socket (socket.AF_INET, socket.SOCK_STREAM) hospedeira =
# ligam-se à porta
serverSocket.bind ((host, port))
while True:
# estabelecer uma conexão
clientSocket, addr = serverSocket.accept () sRecv =
clientSocket.recv (512) clientSocket.close ()
Para testar este sistema, devemos primeiro lançar o TCP Server no PC, em seguida, executar o TCP Cliente no ESP8266
executando o ampy comando: $ ampy --port / dev / ttyUSB0 executar mainTCPClient.py O TCP Server irá produzir o seguinte
TCP Server aguarda solicitações de entrada em ... Entradas [5-4-0] = [011] Entradas [5-4-0] =
[011] Entradas [5-4-0] = [011 192.168.0.100:55000 ] Entradas [5-4-0] = [011] Entradas [5-4-0] =
[010] Entradas [5-4-0] = [010] Entradas [5-4-0] = [110] Entradas [5-4-0] = [110] Entradas [5-4-0]
= [100]
Entradas [5-4-0] = [100]
entradas [5-4-0] = [100]
Lendo entradas digitais usando um servidor Web
É possível ler pinos de entrada digitais 5,4 e 0, utilizando um servidor HTTP (Web) que corre na placa esp8266 com um endereço
IP 192.168.0.107. O servidor HTTP espera para solicitações de entrada na porta 8080.
O código-fonte MicroPython do servidor HTTP ( HTTPServer.py) é mostrada em Listagem 19. Listagem 19.
'192.168.0.107', 8080)
# Prepare a resposta
response = 'HTTP / 1.1 200 OK \ r \ nContent-Type: text / html \ r \ n \ r \ n' <! DOCTYPE
html> resposta + = "" "<html> <body>
Para iniciar HTTP Server em ESP8266, devemos usar o ampy utilidade como é mostrado abaixo: $ ampy --port / dev /
Nota que se você terminar este aplicativo pressionando Ctrl-C, é preciso reiniciar a placa ESP8266 antes de lançar
o servidor HTTP mais uma vez. O navegador da Web fornece a seguinte saída ( Fig.11).
Fig.11
É possível colocar o código fonte do Servidor HTTP ( HTTPServer.py) no main.py arquivo no diretório raiz de um sistema de arquivos
MicroPython para que o nosso servidor irá começar cada vez que o conselho ESP8266 é alimentado / reset.
O código-fonte MicroPython do HTTP Server será parecido com o seguinte ( Listagem 20). Listagem 20.
pinNum = [5,4,0]
'192.168.0.107', 8080)
# Prepare a resposta
response = 'HTTP / 1.1 200 OK \ r \ nContent-Type: text / html \ r \ n \ r \ n' <! DOCTYPE
html> resposta + = "" "<html> <body>
Escrever este arquivo para ESP8266 pode ser realizado pela ampy Programa: $ ampy --port / dev /
Após a escrita for concluída, reiniciar a placa ESP8266 para iniciar o servidor HTTP.