Controle do tanque Arduino via Wi-Fi. Controlando a máquina via WiFi usando ESP8266 NodeMCU Arduino android wifi load control

Já pensou em controlar algum dispositivo eletrônico usando seu smartphone? Concordo, seria muito legal controlar um robô ou qualquer outro dispositivo a partir do seu smartphone. Oferecemos uma lição simples para iniciantes e iniciantes sobre como controlar um smartphone usando Arduino via Bluetooth. Se depois desta lição você quiser conhecer melhor o Arduino, poderá encontrar livros sobre o assunto.

Passo 1. O que precisamos

Dispositivos

Módulo - Módulo Bluetooth HC 05/06
Placa - Arduino
Diodo emissor de luz (LED)
Resistência - 220Ω
Dispositivo Android

Programas

IDE do Arduino
Android Studio (na verdade não é necessário, porque você encontrará o aplicativo Android abaixo)

Passo 2. Como funciona

Normalmente fazemos esta etapa no final, mas para que você entenda o que temos que alcançar, veja o resultado nesta etapa intermediária. Também publicamos um tutorial em vídeo passo a passo abaixo.

Passo 3. Começamos a montar o circuito

O circuito do nosso tutorial é tão simples e pequeno que só precisamos fazer algumas conexões:

Pinos Arduino ____________Pinos do módulo Bluetooth
RX (Pino 0)___________________________TX
TX (Pino 1)___________________________RX
5V__________________________VCC
GND_______________________GND

Conecte o negativo do LED ao GND do Arduino e o positivo ao pino 13 através de uma resistência de 220 Ohm - 1 kOhm. Em geral, na nossa figura abaixo tudo fica bem claro.

Não conecte as saídas Bluetooth RX a RX e TX a TX às saídas do Arduino, você não receberá nenhum dado, aqui TX significa transmitir, RX significa receber.

Etapa 4: Carregando o programa para Arduino

Agora precisamos escrever um programa e carregá-lo em nosso Arduino. Se você ainda não sabe fazer isso, baixe livros. O código abaixo é exatamente o que precisamos carregar no Arduino.

/* Bluetooh Basic: LED ON OFF * Coder - Mayoogh Girish * Site - http://bit.do/Avishkar * Baixe o aplicativo: https://github.com/Mayoogh/Arduino-Bluetooth-Basic * Este programa permite que você para controlar um LED no pino 13 do arduino usando um módulo bluetooth */ char data = 0; //Variável para armazenar dados recebidos void setup() ( Serial.begin(9600); //Define o baud para transmissão de dados serial pinMode(13, OUTPUT); //Define o pino digital 13 como pino de saída ) void loop() ( if(Serial.available() > 0) // Envia dados somente quando você recebe dados: ( data = Serial.read(); //Lê os dados recebidos e armazena-os em dados variáveis ​​Serial.print(data); // Imprime o valor dentro dos dados no monitor serial Serial.print("\n"); //Nova linha if(data == "1") // Verifica se o valor dos dados é igual a 1 digitalWrite(13, HIGH); // Se o valor for 1 então o LED acende else if(data == "0") // Verifica se o valor do dado é igual a 0 digitalWrite(13, LOW); //Se o valor for 0 então o LED apaga ) )

Passo 5. Como funciona o processo

O módulo HC 05/06 opera através de um canal de comunicação serial. O aplicativo Android envia dados sequencialmente para o módulo Bluetooth quando você pressiona uma tecla específica. O Bluetooth do outro lado recebe os dados e os envia para o Arduino através da conexão TX do módulo Bluetooth (conexão Arduino RX).

O código carregado no Arduino verifica os dados recebidos e os compara. Se for recebido um “1”, o LED acende e apaga quando um “0” é recebido. Abra o monitor da porta serial e observe os dados recebidos.

Passo 6. Aplicativo para dispositivos Android

Neste tutorial não abordaremos a criação de aplicativos para dispositivos Android. Você pode baixar o aplicativo no GitHub.

Como usar o aplicativo?

Depois de nos conectarmos via Bluetooth, precisamos baixar e instalar um aplicativo que, através de um smartphone :), controlará nosso LED à distância. Você pode baixar o aplicativo gratuitamente na Amazon.com. Conectamos o smartphone ao módulo Bluetooth HC 05/06:

  1. Ligue o módulo HC 05/0
  2. Procurando um dispositivo
  3. Conectamos ao HC 05/06 digitando a senha padrão “1234” ou “0000” (quatro zeros).

Depois disso instalamos o aplicativo em nosso smartphone. Vamos abrir. Selecione um dispositivo - selecione o módulo Bluetooth da lista (HC 05/06). Após a conexão bem-sucedida, pressione o botão ON para ligar o LED e o botão OFF para desligar o LED. Em seguida, você pode clicar no botão “Desconectar” para desconectar do módulo Bluetooth.

Este foi um guia para manequins e iniciantes sobre como conectar um módulo Bluetooth ao Arduino. Este projeto pode ser melhorado e levado a um nível superior para, por exemplo, automação residencial através de controle por smartphone, robô controlado e muito mais.

Transferir firmware, atualizações e outros dados usando ferro de solda e fios não é a melhor solução para Arduino. Porém, microcontroladores para arduino wi-fi não são baratos e nem sempre são necessários, por isso os usuários preferem não utilizá-los desnecessariamente em seus projetos.

Mas agora outro produto chinês conquistou o mercado; você pode conectar seu próprio jammer wi-fi esp8266 a uma placa Arduino ou outro sistema e obterá uma conexão estável com uma série de outras vantagens. Então, vamos descobrir o arduino uno wi-fi e se vale a pena comprar este módulo, bem como o que realmente é um microcontrolador semelhante no arduino wi-fi.

Módulos Wi-Fi disponíveis para Arduino

Hoje em dia, a maioria dos usuários do Arduino não se preocupa mais com o preço de tais dispositivos, embora há 3 anos um módulo wi-fi do Arduino fosse considerado um luxo. Tudo isto graças ao jammer wi-fi esp8266, cujos fabricantes introduziram no mercado um produto totalmente novo, surpreendente na sua funcionalidade e, ao mesmo tempo, bastante barato, o que deu um contributo significativo e criou concorrência neste sentido.

Assim, o arduino wi-fi esp8266 é hoje considerado o módulo mais acessível do mercado, como todos os seus irmãos. Assim, o preço em sites estrangeiros começa em 2 dólares, o que permite adquirir esses módulos em lotes e não ter que reflashá-los mil vezes, revendendo os contatos para manter a funcionalidade.

No início, este módulo wi-fi Arduino era utilizado principalmente como escudo wi-fi arduino, por ser a opção mais barata e em nada inferior ao original. O dispositivo é realmente quase lendário, porque não há desvantagens significativas em seu preço. Existem muitas bibliotecas, inclusive de usuário, e também suportam trabalho via barramentos seriais e os comandos AT e AT+ mais simples. Graças a isso, não há necessidade de estudar nenhuma semântica do notório C99, como costuma acontecer com outros microcontroladores de terceiros.

Assim, até um iniciante descobrirá em segundos, e um profissional poderá usar bibliotecas já preparadas. Outras vantagens incluem:

  1. O processador é de 160 MHz, mas é de 32 bits, o que deixa uma certa marca no desempenho. Mas vale lembrar que o módulo ainda é usado em conjunto com placas Arduino, que cortam altas frequências e consomem a maior parte dos recursos por motivos desconhecidos.
  2. O fabricante que lançou o módulo wi-fi esp8266 não parou de projetos interessantes, e agora existe toda uma linha de microcontroladores de qualidade comprovada.
  3. Padrões modernos de segurança de rede. É claro que WPA e WPA2 não são mais tão seguros quanto gostaríamos, mas sua presença não pode deixar de nos agradar em um controlador tão barato.
  4. 16 portas de saída, incluindo 10 bits, permitindo que você experimente a placa.

Mais importante ainda, você encontrará até 4 megabytes de memória permanente, dependendo do tipo de placa, e isso simplifica muito o trabalho com grandes bibliotecas e até mesmo alguns arquivos de mídia. Afinal, na maioria das placas Arduino, até 1 megabyte é considerado um luxo inacessível.

As características do wi-fi esp8266 certamente são animadoras, principalmente em comparação com seus concorrentes mais caros, mas um usuário que não tenha experiência anterior com essas placas terá uma dúvida sobre como conectá-la. O fato é que o módulo tem muito mais pinos do que os iniciantes estão acostumados a ver e, conseqüentemente, começam a entrar em pânico. No entanto, se você entende a situação, então, na realidade, não há nada de complicado nisso. Basta estocar solda e ferro de soldar e apenas ler as instruções.

Como conectar um módulo Wi-Fi ao Arduino

Vejamos como conectar o esp8266 esp 12e e o que é uma ponte uart wi-fi esp8266. Afinal, é a conexão e configuração do módulo que mais questiona.


Em primeiro lugar, decida qual versão do microcontrolador você possui. No primeiro, os LEDs são embutidos próximos aos pinos e, no segundo, que começou a ser produzido recentemente, as luzes de sinalização ficam próximas à antena.

Antes de conectar, você deve baixar o firmware mais recente, que permite aumentar a taxa de troca de pacotes para 9.600 unidades de informação por segundo. E verificaremos a conexão usando um cabo USB-TTL e o terminal correspondente do CoolTerm.


Os pinos para conexão do cabo descritos acima são padrão, mas a alimentação vem através de um pino de 3,3 volts do Arduino. É importante lembrar que a corrente máxima fornecida pela placa não pode ser definida acima de 150 mA, e o módulo wi-fi esp8266 esp 07 e esp8266 witty cloud para arduino requerem 240 mA.

Porém, se não houver outra fonte de corrente, você pode usar a versão padrão do Arduino, mas a potência da placa será prejudicada. Embora, se a carga não for pesada, 70 mA seja suficiente, esteja preparado para reinicializações repentinas do microcontrolador em horários de pico de carga e escreva o software de acordo para que ele filtre e divida os arquivos sem sobrecarregar a placa.


Outra opção de conexão está abaixo. Importante - os contatos RX-TX são conectados com uma mira. Como os níveis de sinal do módulo ESP8266 são 3,3V e o Arduino é 5V, precisamos usar um divisor de tensão resistivo para converter o nível do sinal.

Registrando um módulo Wi-Fi no Arduino

Como você sabe, com a devida experiência, você pode emparelhar o escudo esp8266 ex 12e com um smartphone, mas para iniciantes, registrar o esp8266 esp 12 no sistema Arduino causa dificuldades. Na verdade, basta conectar o módulo e verificar sua funcionalidade emitindo vários comandos AT padrão através do menu de depuração.

Por exemplo, você pode adicionar piscando com um LED padrão (para o diagrama de conexão acima):

#define TXD 1 // GPIO1/TXD01 void setup() ( pinMode(TXD, OUTPUT); ) void loop() ( digitalWrite(TXD, HIGH); delay(1000); digitalWrite(TXD, LOW); delay(1000) ; )

Assim que a placa confirmar que vê o microcontrolador no sistema, você poderá começar a trabalhar totalmente com ele. Porém, vale ressaltar que se a própria placa Arduino for utilizada no projeto apenas para conectar este controlador, isso é irracional.

Um conversor USB-UART é suficiente, já que o esp8266 não usa o “cérebro” do Arduino, e sua memória flash é suficiente para armazenar algumas bibliotecas básicas e firmware. Conseqüentemente, não adianta gastar dinheiro extra em uma placa auxiliar se você pode simplesmente soldá-la ao conversor e utilizá-la posteriormente no projeto. Ao mesmo tempo, conectando uma fonte de alimentação auxiliar e sem se preocupar que os dados deixem de ser transmitidos no momento mais crucial por falta de energia do sistema.

Nota importante! Para o último circuito, carregamos o sketch no Arduino como de costume, mas como o módulo ESP8266 está conectado aos pinos 0 e 1, a programação torna-se impossível. O compilador mostrará um erro. Desconecte os fios que vão para o ESP8266 dos pinos 0 e 1, faça a programação, depois retorne os pinos ao seu lugar e pressione o botão reset do Arduino.

Ele está ganhando cada vez mais popularidade, e o Arduino já está tomando a iniciativa - adicionando esses módulos Wi-Fi à lista de placas suportadas.
Mas como conectá-lo ao Arduino? É possível passar de alguma forma sem um Arduino? É exatamente sobre isso que este artigo tratará hoje.

Olhando para frente, direi que haverá um segundo artigo, mais prático, sobre o tema firmware e programação do módulo ESP8266 no ambiente de desenvolvimento Arduino IDE. Mas primeiro as primeiras coisas.

Este vídeo duplica completamente o material apresentado no artigo.



No momento, existem muitas variedades deste módulo, aqui estão algumas delas:

E aqui está a pinagem do ESP01, ESP03, ESP12:


* Esta imagem pode ser visualizada em boa qualidade quando desligada. site pighixxx. com.

Pessoalmente, gosto mais da versão ESP07. Pelo menos pelo fato de possuir uma tela metálica (que protege os microcircuitos de interferências externas, garantindo um funcionamento mais estável), antena de cerâmica própria e conector para antena externa. Acontece conectando uma antena externa a ele, por exemplo, como biquadrado, então você pode alcançar um bom alcance. Além disso, existem algumas portas de entrada/saída, as chamadas GPIO (portas de entrada e saída de uso geral), semelhantes aos pinos do Arduino.

Voltemos aos nossos módulos Wi-Fi de ovelhas e ao Arduino. Neste artigo, examinarei como conectar um ESP8266 (modelo ESP01) a um Arduino Nano V3.

Porém, essas informações serão relevantes para a maioria dos módulos ESP8266 e também para várias placas Arduino, por exemplo, o Arduino UNO mais popular.

Algumas palavras sobre as pernas do ESP01:

Vcc E GND(na foto acima são 8 e 1) - comida, por perna Vcc pode ser apresentado, a julgar pela documentação, de 3 a 3,6 V, A GND- terra (menos potência). Vi uma pessoa conectar este módulo a duas baterias AA (a tensão de alimentação neste caso era de aproximadamente 2,7 V) e o módulo estava operacional. Mesmo assim, os desenvolvedores indicaram a faixa de tensão na qual o módulo deve ter garantia de funcionamento; se você usar outro, o problema é seu.

Atenção! Este módulo é baseado em lógica de 3,3 V, enquanto o Arduino é principalmente lógica de 5 V. 5 V podem danificar facilmente o ESP8266, por isso ele precisa ser alimentado separadamente do Arduino.

- Meu Arduino tem uma perna onde diz 3,3 V, por que não usar?

Você provavelmente vai pensar. O fato é que o ESP8266 é um módulo que consome bastante energia, e em picos pode consumir correntes de até 200 mA, e quase nenhum Arduino é capaz de fornecer tal corrente por padrão, com exceção do Arduino Due, no qual a corrente na linha de 3,3 V pode chegar a 800 mA, o que é suficiente, em outros casos aconselho usar um estabilizador adicional de 3,3 V, por exemplo AMS1117 3,3 V. Há muitos deles na China e aqui.

Perna RST 6 - destina-se ao hardware para reinicializar o módulo, aplicando brevemente um nível lógico baixo a ele, o módulo será reinicializado. Embora eu tenha negligenciado isso no vídeo, ainda aconselho você “pressione” esta perna com um resistor de 10 kOhm no positivo da fonte de alimentação, para conseguir melhor estabilidade no funcionamento do módulo, caso contrário eu reiniciaria à menor interferência.

Perna CP_PD 4 (ou de outra forma PT) - serve, novamente, para “conectar” o módulo ao modo de economia de energia, no qual consome muito pouca corrente. Bem outra vez - Não faria mal nenhum “pressionar” esta perna com um resistor de 10 kOhm no positivo Pitálova No vídeo, eu estupidamente coloquei essa perna em curto-circuito no Vcc, porque não tinha esse resistor em mãos.

Pernas RXD0 7 TXD0 2 - hardware UART, que é usado para flashing, mas ninguém proíbe o uso dessas portas como GPIO (GPIO3 e GPIO1, respectivamente). Por algum motivo, GPIO3 não está marcado na imagem, mas está na ficha técnica:

Aliás, na perna TXD0 2 o LED “Connect” está conectado e acende quando o nível lógico no GPIO1 está baixo ou quando o módulo envia algo via UART.

GPIO0 5 - pode não apenas ser uma porta de E/S, mas também colocar o módulo em modo de programação. Isso é feito conectando esta porta a um nível lógico baixo (“pressionando” para GND) e fornecendo energia ao módulo. No vídeo eu faço isso com um botão normal. Após piscar, não se esqueça de retirar o jumper/pressionar o botão (não é necessário segurar o botão durante o piscar; ao ser ligado, o módulo entra em modo de programação e permanece nele até ser reiniciado).

GPIO2 3 - porta de entrada/saída.

E mais um ponto importante, cada GPIO do módulo Wi-Fi pode fornecer corrente com segurança de até 6mA, para não queimá-lo, certifique-se de colocar os resistores em série com as portas de entrada/saída ligadas... Lembre-se da lei de Ohm R = U/I = 3,3V / 0,006 A = 550 Ohm, ou seja, em 560 Ohms. Ou negligencie-o e depois pergunte-se por que não funciona.

No ESP01, todos os GPIOs suportam PWM, então aos nossos quatro GPIOs, ou seja, GPIO0-3, você pode conectar um driver de motor, ala L293 / L298, e dirigir dois motores, por exemplo, barcos, ou fazer RGB Wi-Fi o que for . Sim, sim, este módulo tem muitas coisas a bordo, e para projetos simples não é necessário o violinista Arduino, apenas para piscar. E se você usa o ESP07, em geral as portas são quase iguais às do Uno, o que permite dispensar o Arduino com segurança. É verdade que há um momento desagradável: o ESP01 não possui nenhuma porta analógica e o ESP07 possui apenas uma, chamada ADC. É claro que isso torna o trabalho com sensores analógicos mais difícil. Nesse caso, um multiplexador analógico Arduino ajudará.

Tudo parece ser explicado pela pinagem, e aqui está o diagrama para conectar o ESP8266 ao Arduino Nano:

Você vê o jumper nos pinos RST e GND do Arduino Nano? Isso é necessário para que o Arduino não interfira no firmware do módulo, no caso de conectar o ESP8266 via Arduino isso é um pré-requisito.

Além disso, se você conectar ao Arduino, o RX do módulo deve ir para o RX do arduino, TX - TX. Isso ocorre porque o chip conversor já está conectado aos pinos do Arduino em um padrão cruzado.

Também importante é um divisor resistivo composto por resistores de 1 kOhm e 2 kOhm (pode ser feito de dois resistores de 1 kOhm conectando-os em série) ao longo da linha RX do módulo. Porque o Arduino é lógico de 5 V e o módulo é 3.3. Este é um conversor de nível primitivo. Deve estar lá, pois as pernas do módulo RXD TXD não toleram 5 V.

Bem, você pode ficar completamente sem um Arduino conectando o ESP8266 por meio de um conversor USB-UART normal. No caso de conexão ao Arduino, usamos, de fato, um conversor de interface usb e uart padrão, ignorando o cérebro. Então, por que gastar dinheiro extra se você pode viver sem um Arduino? Somente neste caso conectamos o RXD do módulo ao TXD do conversor, TXD - RXD.

Se você tem preguiça de se preocupar com conexões, mexendo em resistores e estabilizadores, existem soluções NodeMcu prontas:

Tudo é muito mais simples aqui: conecte o cabo no computador, instale os drivers e o programa, só não esqueça de usar o jumper/botão do GPIO0 para colocar o módulo em modo firmware.

Bom, provavelmente isso é tudo com a teoria, o artigo acabou ficando bem longo, e publicarei a parte prática, ala firmware e programação do módulo, um pouco mais tarde.

No processo de estudo e concepção de projetos cada vez mais complexos, chega o momento em que surge a necessidade e o desejo de aprender a trabalhar com um tipo de comunicação tão comum como o WiFi. Uma vez que este tipo de comunicação pode permitir-lhe criar confortavelmente uma única rede para os seus dispositivos domésticos inteligentes e controlá-los, por exemplo, a partir de um telemóvel, tablet ou computador, ou seja, criar uma verdadeira casa inteligente que custará você dezenas de vezes menos do que comprar soluções prontas na loja. O uso do WiFi, claro, não se limita a isso e são tantos os exemplos de utilização desse tipo de comunicação que não adianta listá-los, e se você acessou esta página significa que já precisa usar WiFi por algum motivo, você só precisa descobrir como trabalhar com ele corretamente.

Vamos descobrir isso com base no módulo WiFi mais barato e popular ESP8266-01. Você pode comprar o módulo WiFi ESP8266-01 em nosso site.

Uma das principais vantagens desse módulo é a presença de memória e microcontrolador próprio na placa, o que permite trabalhar de forma independente, carregando o sketch diretamente no próprio módulo.

Na verdade, existem muitas modificações no módulo WiFi ESP8266 e não as listaremos aqui; depois de aprender como trabalhar com um, você poderá facilmente começar a trabalhar com outros. Gostaria de observar imediatamente que trabalhar com WiFi pode parecer uma tarefa bastante difícil, e se você tem poucos projetos concluídos em sua bagagem, é melhor abandonar a comunicação WiFi por enquanto e usar comunicações de rádio em seus projetos, trabalhando com os quais é muito mais fácil de entender. Comunidades inteiras e fóruns temáticos são criados para trabalhar com módulos WiFi, o que mais uma vez prova o quão difícil é para a maioria das pessoas compreender imediatamente este tipo de comunicação e, após reler todas as informações, a maioria simplesmente desiste. Muito provavelmente, não poderei incluir todas as informações importantes apenas no âmbito deste artigo, e não faz sentido fazê-lo, caso contrário, haverá outra bagunça. Tentarei seguir o caminho de uma sequência estrita dos pontos mais importantes, para que você possa começar a entender o princípio de funcionamento desse tipo de comunicação e depois simplesmente desenvolver suas próprias habilidades nesse sentido.

Então, vamos começar e primeiro dar uma olhada nos pinos do módulo WiFi ESP8266-01.

CCV- fonte de alimentação do módulo de 3V a 3,6V

GND- Terra.

RST- Redefinir saída responsável por reinicializar o módulo.

CH_PD- “chip power-down” quando a energia é fornecida a ele, a operação do módulo é ativada.

Texas- transferência de dados (interface UART)

RX- recepção de dados (interface UART)

GPIO0

GPIO2- porta de E/S de uso geral

Os pinos GPIO0 e GPIO2 são exatamente os mesmos pinos digitais com os quais trabalhamos nas placas Arduino para interconexão com diversos sensores, e são utilizados no caso de implementação de operação independente no microcontrolador WiFi interno do módulo ESP8266-01.

Para alimentar o módulo ESP8266-01 de forma confiável, use uma fonte de alimentação externa estabilizada de 3,3 V e é melhor não tentar tirar energia da sua placa Arduino, pois o módulo consome corrente de até 215mA e isso pode acabar mal para sua placa de depuração. Espero que onde conseguir uma fonte de alimentação estabilizada de 3,3 V não seja um problema para você, caso contrário, é claramente muito cedo para você lidar com este módulo. Por exemplo, gosto de usar este módulo de potência YWRobot de 3,3 V e 5,0 V para montar rapidamente circuitos em placas de ensaio, o que permite obter rapidamente uma tensão estabilizada de 3,3 V ou 5 V nos caminhos de alimentação correspondentes da placa de ensaio.

Conectando o plus (+) da nossa fonte de alimentação de 3,3 V ao pino CCV módulo ESP8266-01 e menos (-) traga a fonte de alimentação para a saída GND. Neste estado, o LED vermelho do módulo acenderá, sinalizando que a alimentação está conectada corretamente. Para que o módulo seja acionado é necessário também conectar o plus (+) fonte de alimentação com saída CH_PD módulo ESP8266-01 e é aconselhável fazer isso diretamente através de um resistor de 10 kOhm. Agora, quando ligarmos a energia, o LED vermelho do módulo deverá acender e o LED azul deverá piscar rapidamente algumas vezes. Se é isso que acontece com você, então está tudo bem, você conectou tudo corretamente e seu módulo está funcionando. Caso contrário, verifique novamente a conexão ou substitua o módulo, pois provavelmente não está funcionando.

Vá em frente. Para trabalhar com o módulo WiFi ESP8266, precisamos de um adaptador USB-UART. Existem diferentes adaptadores, por exemplo: FT232RL, CP2102, PL2303. Mas assumiremos que você não possui esses adaptadores e usaremos uma placa Arduino como adaptador USB-UART. Usarei uma placa Arduino NANO para isso, mas você pode usar qualquer outra que estiver à sua disposição. A conexão em qualquer placa é idêntica. Fazemos a conexão de acordo com o diagrama a seguir.

Vejamos o que fizemos aqui. Observe imediatamente que conectamos os pinos da placa Arduino com um jumper RST E GND. Essa manipulação desativa o microcontrolador e nos permite fazer um verdadeiro adaptador USB-UART a partir de nossa placa Arduino.

Como alimentamos o módulo WiFi ESP8266-01 a partir de uma fonte de alimentação externa separada, lembre-se de que devemos sempre conectar o aterramento de todas as fontes de alimentação em nossos projetos. Portanto, conectamos a saída GND Placas Arduino com terra (-) nossa fonte de alimentação externa de 3,3 V projetada para alimentar o módulo ESP8266-01.

Conclusão Texas conecte sua placa Arduino ao pino Texas Módulo ESP8266-01. Esta linha transmitirá dados do módulo WiFi para a placa Arduino. Qualquer pessoa familiarizada com a interface UART pode se perguntar: "Mas como isso pode acontecer? Em todos os lugares eles ensinaram que o TX deve se conectar ao RX. O TX transmite informações e o RX recebe." E você estará certo. Isso mesmo, o TX está sempre conectado ao RX, mas no caso em que fazemos um adaptador UART do Arduino, precisamos conectar os dispositivos diretamente. Considere isso a exceção à regra.

Linha RX Também conectamos sua placa Arduino diretamente na linha RX Módulo ESP8266-01. Esta linha transmitirá informações da placa Arduino para a placa do módulo WiFi. Mas fazemos essa conexão através de um chamado divisor de tensão, composto por dois resistores com valores nominais de 1 kOhm e 2 kOhm. Precisamos reduzir a tensão nesta linha usando dois resistores (divisor de tensão), pois a placa Arduino transmite um sinal lógico com tensão de 5V, e o módulo WiFi opera com tensão de 3,3V. Para converter o sinal lógico, poderíamos usar uma placa conversora de nível lógico especial, o que seria mais correto, mas novamente, vamos supor que você não tenha uma, e tivemos que seguir um caminho mais simples e fazê-lo usando um divisor de tensão.

Agora conectamos tudo o que é necessário para trabalhos futuros, mas ainda temos mais 3 pinos não utilizados ( GPIO0, GPIO2 E RST) sobre Módulo WiFi ESP8266-01. Para uma operação estável do módulo WiFi, precisamos puxar esses pinos não utilizados restantes para o positivo (+) linhas de energia do módulo através de resistores de 10 kOhm.

Isso nos salvará de diversas interferências (interferências) e tornará a operação do módulo estável. É melhor fazer isso imediatamente. Caso contrário, não se surpreenda se seu módulo estiver constantemente sobrecarregado, produzir informações incompreensíveis ou não querer funcionar. Usar resistores pull-up em pinos não utilizados de um microcontrolador deve ser uma regra prática se você deseja uma operação estável em seus projetos.

E novamente verificamos a funcionalidade do módulo WiFi ESP8266-01. Ligue a energia e veja se o LED vermelho acende e o LED azul pisca algumas vezes. Se tudo acontecer assim, ótimo, vamos em frente. Caso contrário, verificamos a correcção das ligações, bem como a qualidade de todos os contactos. Pode ser apenas uma situação trivial quando você verificou tudo dez vezes e se certificou de que tudo estava conectado corretamente, mas ao ligar o módulo, você vê que o LED azul não se comporta adequadamente, fica constantemente aceso, piscando constantemente, ou não responde a nada. Isto pode ser devido a mau contato em alguma linha. Por exemplo, ao montar um circuito em uma placa de ensaio, um dos resistores não fica bem encaixado em seu lugar e isso causa interferência. Verifique a qualidade das conexões. O módulo é muito sensível. Não negligencie isso. Este é um motivo comum para operação instável.

Em geral, terminamos a conexão. Agora precisamos preparar o programa Arduino IDE para funcionar com o módulo WiFi ESP8266-01. Para isso, precisamos baixar e instalar no Arduino IDE o arquivo necessário com bibliotecas, exemplos e placas ESP, que posteriormente nos permitirão fazer upload de esboços diretamente para o microcontrolador do módulo ESP8266-01, alterar o firmware, etc. Para os fins deste artigo, provavelmente não precisaremos dessas configurações, mas me parece que depois de descobrirmos como conectar o módulo, o procedimento estará correto se baixarmos imediatamente tudo o que é necessário para trabalhar com o Arduino IDE . Tudo aqui é simples em princípio.

Lance o programa IDE do Arduino e vá para o menu "Arquivo" - "Configurações"

Na janela que aparece, no campo superior escrevemos “esp8266”. Como resultado, teremos apenas o firmware necessário na janela. Ao clicar no firmware, um botão aparecerá "Instalação". Clique no botão "Instalação" e espere até que tudo esteja instalado. O arquivo é bastante grande, cerca de 150 megabytes, então você terá que esperar.

Após a conclusão da instalação. Reinicializamos o Arduino IDE e vemos como as novas placas ESP apareceram no menu “Ferramentas” - “Placas”. Isso é tudo. Concluímos a configuração do Arduino IDE. Não precisamos dessas configurações por enquanto, mas em trabalhos futuros não poderemos passar sem elas.

Temos tudo conectado e preparado, agora podemos começar a entender os controles. Na verdade, agora continuaremos verificando e configurando o módulo usando comandos AT, e não há como ficar sem ele. Os módulos WiFi são implementados de forma que toda a comunicação com eles ocorra por meio dos chamados comandos AT, que são conectados ao firmware do módulo. Não listaremos todos os comandos AT aqui, existem muitos deles e se você quiser estudar tudo com atenção, poderá encontrá-los facilmente na Internet. E agora usaremos apenas o mais necessário para começar.

E assim, conectamos nossa placa Arduino através de um cabo USB ao computador. E uma fonte de energia externa que alimenta Módulo WiFi ESP8266-01 Não há necessidade de ligá-lo ainda. Lançamos o programa Arduino IDE, selecionamos nossa placa Arduino no menu “Ferramentas”, no meu caso é Arduino NANO, e você seleciona a sua. Além disso, não se esqueça de selecionar a porta à qual nosso Arduino está conectado. Espero que você entenda tudo isso e saiba como fazer.

Monitoramento de porta aberta "Ferramentas" - "Monitor de Porta". Selecionando a velocidade da porta 74880 (nesta velocidade o módulo inicia) e selecione “NL & CR” na lista à esquerda

Agora conectamos uma fonte de alimentação externa que alimenta nosso módulo WiFi. Depois disso, você deverá ver aproximadamente as seguintes informações no monitor da porta.

Aqui vemos algumas informações sobre nosso módulo WiFi (velocidade, quantidade de memória interna, etc.). As informações recebidas podem diferir dependendo da versão do firmware do módulo WiFi. Não vamos nos concentrar nisso. Outra coisa é importante. Abaixo vemos um conjunto de caracteres sem sentido, isso significa que a velocidade da porta (74880 baud) que definimos é adequada apenas para o carregamento inicial do módulo para ver esta informação normalmente, mas esta velocidade não é adequada para comunicação normal com o módulo Wi-Fi.

Para selecionar a velocidade correta da porta, simplesmente alteraremos a velocidade da porta e enviaremos símbolos para a porta (o campo na parte superior e o botão enviar) NO até obtermos uma resposta OK. Se você tentar enviar caracteres agora NO para a porta a uma velocidade de 74880, você receberá mais um ou dois caracteres sem sentido em resposta.

Tente definir imediatamente a velocidade para 115200 baud e enviar o comando AT. Na maioria das vezes, os módulos são atualizados nessa velocidade.

Esta é a imagem que você deve ver no monitor da sua porta. Se você ainda receber um conjunto incompreensível de caracteres em resposta, diminua a velocidade e reenvie NO comandos até que a resposta volte OK. Se você tentou todas as velocidades e não obteve a resposta correta, então você está sem sorte e o módulo é atualizado com firmware em uma velocidade fora do padrão. Então, tudo o que resta é atualizar o módulo com firmware normal, mas este é um tópico para um artigo separado.

Espero que esteja tudo bem e que você tenha selecionado a velocidade correta. A propósito, se você tentar desligar e ligar o módulo WiFi novamente depois de selecionar a velocidade correta, então, em vez das mesmas informações iniciais que foram exibidas corretamente a uma velocidade de 74880 baud, você irá, pelo contrário, você verá um conjunto confuso de caracteres, mas no final você verá a palavra “pronto” ". Mas temos a oportunidade de visualizar essas informações iniciais na forma normal e na velocidade correta; para isso, precisamos reinicializar programaticamente o módulo usando o comando AT AT+RST.

Para descobrir a versão do firmware do seu módulo WiFi ESP8266-01, você precisa enviar um comando para o monitor da porta AT+GMR e em resposta você receberá aproximadamente as seguintes informações:

O módulo WiFi ESP8266-01 pode operar nos modos ponto de acesso e cliente. Para permitir que o módulo opere em todos os modos ao mesmo tempo, envie o comando para o monitor de porta AT+CWMODE=3 e em resposta você deve receber OK.

Equipe AT+CWLAP permitirá que você visualize todos os pontos de acesso WiFi que seu módulo vê atualmente. Meu módulo, por exemplo, atualmente vê apenas três pontos de acesso WiFi em sua área de cobertura. A resposta deve ser algo assim:

Por exemplo, sabemos a senha do terceiro ponto de acesso e para conectar-se a ele executamos o comando AT+CWJAP="nome","senha", no meu caso este comando se parece com AT+CWJAP="dsl_unlim_512_home","11111111", ao qual obtemos uma resposta bem-sucedida:

Os parâmetros do comando são gravados na memória flash do módulo WiFi ESP8266-01, e se desligarmos o módulo e ligá-lo novamente, ele se conectará automaticamente a este ponto de acesso. Olha, por acaso não deixe espaço no comando, caso contrário você receberá uma resposta ERRO. Observe que nas versões de firmware mais recentes é recomendado usar o comando AT+CWJAP_CUR, ou seja, o comando ficará assim AT+CWJAP_CUR="nome","senha". Se de repente esquecemos a qual ponto de acesso nosso módulo está conectado, precisamos enviar um comando AT+CWJAP? ou AT+CWJAP_CUR? e em resposta receberemos o ponto de acesso ao qual o módulo WiFi está conectado no momento.

Com conexão e configuração inicial Módulo WiFi ESP8266-01 nós descobrimos isso. O módulo funciona e está pronto para a implementação de seus futuros projetos. Simplesmente não é possível analisar todos os exemplos possíveis de trabalho com este módulo no âmbito de um artigo, e trataremos disso nos artigos seguintes. E para aqueles que não estão muito familiarizados com programação, mas realmente desejam começar a gerenciar rapidamente seus projetos usando WiFi, recomendo apresentá-los ao designer de projetos RemoteXY WiFi. Este site irá ajudá-lo a criar facilmente uma interface de controle para seu celular ou tablet e usá-la para controlar seu dispositivo ao qual você conecta um módulo WiFi.

Neste artigo, você aprenderá como criar um sistema que pode ligar e desligar cargas DC usando um aplicativo móvel. Você também aprenderá como realizar esta tarefa instantaneamente ou usando temporizadores predefinidos para ligar e desligar cargas.

Visão Geral do Projeto

Você pode implementar este sistema onde precisar ligar uma carga DC por um tempo específico. Nosso aplicativo Android irá ajudá-lo com isso, sem a necessidade de interface de hardware, teclado ou display LCD.

Acessórios

Conjunto da placa de desenvolvimento ESP8266

O ESP8266 é um SoC de baixo custo com um microcontrolador integrado e uma pilha completa de protocolos TCP/IP, o que significa que pode acessar diretamente sua rede Wi-Fi.

Como este chip possui seu próprio microcontrolador, você pode colocar o código da sua aplicação nele, ou pode simplesmente usar o módulo como um transceptor Wi-Fi, que é o que faremos neste projeto. Seria mais eficiente usar este módulo tanto como transceptor quanto como controlador, mas para fins de treinamento iremos interagir com o módulo usando um Arduino.

O chip ESP8266 vem em módulos diferentes. Usaremos o módulo ESP-01. Claro, você pode usar qualquer outro módulo.

Primeiramente, você deve saber que o módulo opera a 3,3V e a tensão de alto nível lógico do Arduino deve ser a mesma para não danificar nosso módulo. Isso requer um conversor de nível de tensão entre a placa Arduino (que funciona a 5V) e o módulo. A boa notícia é que o conversor precisará apenas de um pino para enviar ao Arduino, já que o pino de recepção normalmente reconhece sinais lógicos de 3,3V do ESP8266.

Uma das maneiras mais simples de realizar essa conversão é um circuito da Sparkfun. Você pode solicitar um módulo pronto.

Conversor de nível 5V → 3,3V

A figura abaixo mostra a pinagem do nosso módulo no ESP8266:

ConclusãoPropósito
UTXDTransferência de dados via UART
URXDRecebendo dados via UART. A saída à qual ele se conecta deve ser de 3,3V.
CH_PDDesligar: entrada baixa desliga o chip, entrada alta liga; Para o funcionamento normal do módulo é necessário conectá-lo à rede elétrica.
GPIO0Ao carregar: o nível deve estar alto para entrar no modo de carregamento normal; um nível baixo entra em modos de inicialização especiais.
GPIO2Na inicialização: um nível baixo faz com que o bootloader entre no modo de inicialização flash; um nível alto causa o modo de inicialização normal.
RSTReiniciar; nível ativo - baixo.
GNDTerra.
CCVPotência/3,3V.

Usei o LM317, um regulador de tensão linear configurável com corrente de saída de até 1,5A, para fornecer ao módulo uma fonte de alimentação adequada de 3,3V.

Observação: Não use o pino de 3,3 V do Arduino, pois o regulador de tensão de 3,3 V na placa Arduino não pode fornecer a quantidade de corrente exigida pelo módulo, especialmente durante picos de consumo de energia durante a transmissão.

Usei BS170 (em vez de BSS138) para o conversor de nível lógico; ambos funcionam bem.

Agora você pode conectar seu módulo ao computador usando um conversor USB-TTL e testá-lo.

Conjunto de placa de ensaio de relé

Para controlar o relé, usei um transistor NPN bipolar BC337 com resistor de 1 kOhm na base. Para proteção contra tensão reversa da bobina usei um diodo 1n4007.

Decidi conectar o contato normalmente fechado (NF) do relé ao terra.

Código Arduino

Agora estamos diante de um problema. O ESP8266 usa UART como interface para comandos AT, enquanto o Arduino Uno (que usa o Atmega328) possui apenas uma porta UART. Esta porta já está conectada à ponte USB-TTL, assim como aos pinos 0 e 1.

Como solução, você pode usar um emulador para a porta UART em outro pino digital do Arduino usando as bibliotecas AltSoftSerial ou SoftwareSerial. Isso permitirá que você ainda tenha uma porta UART de hardware para depuração e impressão de mensagens no console e uma porta de software para comunicação com o módulo.

Muitas pessoas (inclusive eu) relatam problemas com a porta serial do software em altas taxas de transmissão - como as que usaremos com o esp8266, 115200 bps. Posso afirmar que 50% dos dados recebidos do módulo serão danificados se você utilizar um software UART, e dos dados transferidos do Arduino para o módulo, quase 100% estarão corretos. Obtive esses resultados após monitorar os sinais nas linhas RX e TX.

Como solução, adicionei algumas diretivas de definição ao código para facilitar a escolha entre portas UART de hardware e software. Tenha em mente que você não pode usar a mesma porta para depuração e comunicação com o módulo, então você precisa escolher entre elas.

//descomente Serial.*** se quiser usar uma porta serial de hardware (pinos 0,1) para se comunicar com o ESP //descomente esp8266.*** se quiser usar uma porta serial de software (pinos 2,3 ) para se comunicar com o ESP #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial. read() //esp8266 .read() #define esp8266_Write(ARG1,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) // esp8266.print(ARG)

Na fonte você encontrará parte do código que instala o módulo com seu roteador:

SendCommand("AT+RST\r\n", 2000, DEBUG); // reinicia o módulo sendCommand("AT+CWMODE=1\r\n", 1000, DEBUG); // configura como ponto de acesso sendCommand("AT+CWJAP=\"tur\",\"341983#tur\"\r\n", 3000, DEBUG); //**** MUDE SSID e SENHA DE ACORDO COM SUA REDE ******// delay(10000); sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // obtém o endereço IP sendCommand("AT+CIPMUX=1\r\n", 1000, DEBUG); // configura para múltiplas conexões sendCommand("AT+CIPSERVER=1,1337\r\n", 1000, DEBUG); // habilita o servidor na porta 1337

O loop de esboço aguarda comandos que devem vir através da conexão Wi-Fi. Os seguintes comandos são atualmente suportados:

  • 'con' para obter o status do pino, lógica alta ou baixa;
  • ‘on=’ habilita a saída correspondente;
  • ‘of=’ desativa a saída correspondente;
  • ‘Tm=n/fS’ configura o temporizador para ligar (n) ou desligar (f) a saída correspondente.

Todos os comandos têm uma resposta de confirmação.

Notas:

  • algumas partes do esboço são baseadas em;
  • se você estiver usando módulos com um SDK antigo, poderá ter os mesmos erros que eu. A única solução neste caso é atualizar o firmware para a versão mais recente. Consulte para obter ajuda para atualizar o firmware do módulo no ESP8266. Atualizei o firmware da versão 1.3 para 1.5.4.

Código completo do programa:

#incluir #define DEBUG 0 // se você estiver usando uma porta serial de hardware para se comunicar com o ESP, altere o valor para 0 #define ESPBaudRate 115200 #define HWSBaudRate 115200 #define OUTPUT1 11 #define OUTPUT2 12 #define OUTPUT3 13 //descomente Serial. ***, se você quiser usar uma porta serial de hardware (pinos 0,1) para se comunicar com o ESP //descomente esp8266.*** se você quiser usar uma porta serial de software (pinos 2,3) para se comunicar com o ESP #define esp8266_Available() Serial.available() //esp8266.available() #define esp8266_Find(ARG) Serial.find(ARG) //esp8266.find(ARG) #define esp8266_Read() Serial.read() / /esp8266.read() #define esp8266_Write(ARG1 ,ARG2) Serial.write(ARG1,ARG2) //esp8266.write(ARG1,ARG2) #define esp8266_Print(ARG) Serial.print(ARG) //esp8266.print( ARG) // Faz com que a linha Arduino RX seja o pino 2, e a linha TX do Arduino seja o pino 3. // Isso significa que você precisa conectar a linha TX do ESP ao pino 2 do Arduino, // e ao RX linha do ESP ao pino 3 do Arduino. SoftwareSerial esp8266(2, 3); /*************/ byte OUTPUTstate; byte OUTPUTTMRIsSet ; byte OUTPUTTMRState; longo OUTPUTimer; /************/ /***Comandos**/ String GETSTATE = "con"; // Solicita string do aplicativo móvel para descobrir o status de cada saída String SETON = "on="; // Solicita string do aplicativo móvel para ativar a saída String SETOFF = "of="; // Solicita string do aplicativo móvel para desligar a saída String TIMER = "tm="; // Solicita linha do aplicativo móvel para definir o temporizador de saída /**************/ void setup() ( Serial.begin(HWSBaudRate); // Porta serial para envio de mensagens do Arduino para o computador esp8266.begin(ESPBaudRate); // Porta serial do software para envio de mensagens do Arduino para o ESP8266 pinMode(OUTPUT1, OUTPUT); digitalWrite(OUTPUT1, LOW); pinMode(OUTPUT2, OUTPUT); digitalWrite(OUTPUT2, LOW); pinMode ( OUTPUT3, OUTPUT); digitalWrite(OUTPUT3, LOW); // reinicia o módulo sendCommand("AT+RST\r\n", 2000, DEBUG); // configura como ponto de acesso sendCommand("AT+CWMODE=1 \r\ n", 1000, DEBUG); //**** ALTERE SSID e SENHA DE ACORDO COM SUA REDE ******// sendCommand("AT+CWJAP=\"tur\",\"341983# tur\ "\r\n", 3000, DEBUG); delay(10000); // obtém um endereço IP sendCommand("AT+CIFSR\r\n", 1000, DEBUG); // configura para múltiplas conexões sendCommand( "AT+ CIPMUX=1\r\n", 1000, DEBUG); // habilita o servidor na porta 1337 sendCommand("AT+CIPSERVER=1,1337\r\n", 1000, DEBUG); if (DEBUG == true) Serial.println("Servidor pronto"); ) void loop() ( if (esp8266_Available()) // verifica se esp enviou uma mensagem ( if (esp8266_Find("+IPD,")) ( // espera até que o buffer serial esteja cheio (leia todos os dados seriais) delay( 1000 ); // obtém o ID da conexão para que possamos desconectar int connectionId = esp8266_Read() - 48; // subtrai 48 porque a função read() retorna // um valor decimal em ASCII, e 0 (o primeiro número decimal) inicia with 48 String closeCommand = "AT+CIPCLOSE="; // criando um comando para fechar a conexão closeCommand += connectionId; // adiciona o id da conexão closeCommand += "\r\n"; esp8266_Find("? "); // Este caractere define o início do comando no corpo da nossa mensagem String InStream; InStream = (char) esp8266_Read(); InStream += (char) esp8266_Read(); InStream += (char) esp8266_Read() ; if (DEBUG == true) Serial.println(InStream); if (InStream.equals(GETSTATE)) ( // resposta ao comando Status=<состояние_выхода_1><состояние_выхода_2><состояние_выхода_3>Resposta de string = "Status="; resposta += OUTPUTestado; resposta += OUTPUTestado; resposta += OUTPUTestado; sendHTTPResponse(connectionId, resposta); sendCommand(closeCommand, 1000, DEBUG); // fecha a conexão) else if (InStream.equals(SETON)) ( int pinNumber = (esp8266_Read() - 48); // obtém o primeiro dígito, ou seja, se o pino for 13, então o 1º dígito é igual a 1 int segundoNumber = (esp8266_Read() - 48); if (secondNumber >= 0 && segundoNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 1; else if (pinNumber == OUTPUT2) OUTPUTstate = 1; else if (pinNumber == OUTPUT3) OUTPUTstate = 1; digitalWrite(pinNumber, 1); String response = "Confg="; // Отклик на команду Confg=<номер_вывода>resposta += númeropino; sendHTTPResponse(connectionId, resposta); sendCommand(closeCommand, 1000, DEBUG); // fecha a conexão) else if (InStream.equals(SETOFF)) ( int pinNumber = (esp8266_Read() - 48); // obtém o primeiro dígito, ou seja, se o pino for 13, então o 1º dígito é igual a 1 int segundoNumber = (esp8266_Read() - 48); if (secondNumber >= 0 && segundoNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (pinNumber == OUTPUT1) OUTPUTstate = 0; else if (pinNumber == OUTPUT2) OUTPUTstate = 0; else if (pinNumber == OUTPUT3) OUTPUTstate = 0; digitalWrite(pinNumber, 0); // изменить состояние вывода String response = "Confg="; // Отклик на команду Confg=<номер_вывода>resposta += númeropino; sendHTTPResponse(connectionId, resposta); sendCommand(closeCommand, 1000, DEBUG); // fecha a conexão) else if (InStream.equals(TIMER)) ( int pinNumber = (esp8266_Read() - 48); // obtém o primeiro dígito, ou seja, se o pino for 13, então o 1º dígito é igual a 1 int segundoNumber = (esp8266_Read() - 48); if (secondNumber >= 0 && segundoNumber<= 9) { pinNumber *= 10; pinNumber += secondNumber; // получить вторую цифру, т.е., если вывод 13, то 2-ая цифра равна 3, // и добавить ее к первой цифре } if (esp8266_Read() == "n") { if (DEBUG == true) Serial.println("on"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 1; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 1; } else { if (DEBUG == true) Serial.println("off"); if (pinNumber == OUTPUT1) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT2) OUTPUTTMRState = 0; else if (pinNumber == OUTPUT3) OUTPUTTMRState = 0; } int j = 0; byte Atime; // Таймер может настроен на максимальное значение в 1 сутки // поэтому программа может принять 5 цифр, так как 1 сутки равны 86400 секундам long Time; // Прочитать секунды, значение имеет переменное количество цифр, поэтому читать, пока не получим "s", // что является символом завершения в теле моего сообщения от мобильного телефона while (1) { Time = esp8266_Read(); if (Time == "s") break; Atime[j] = Time - 48 ; j++; } switch (j) // секунды... { case 1: // одна цифра Time = Atime; break; case 2: // две цифры Time = Atime * 10 + Atime; break; case 3: // три цифры Time = Atime * 100 + Atime * 10 + Atime; break; case 4: // четыре цифры Time = Atime * 1000 + Atime * 100 + Atime * 10 + Atime; break; case 5: // пять цифр Time = Atime * 10000 + Atime * 1000 + Atime * 100 + Atime * 10 + Atime[j]; break; } if (DEBUG == true) { Serial.println("Timer:"); Serial.println(Time); } Time = Time * 1000 + millis(); if (DEBUG == true) { Serial.println("Pin:"); Serial.println(pinNumber); } if (pinNumber == OUTPUT1) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT2) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } else if (pinNumber == OUTPUT3) { OUTPUTTMRIsSet = 1; OUTPUTTimer = Time; } String response = "tConfg="; // Отклик на команду tConfg=<номер_вывода>resposta += númeropino; sendHTTPResponse(connectionId, resposta); sendCommand(closeCommand, 1000, DEBUG); // fecha a conexão ) else // um comando não suportado foi recebido ( String response = "ERROR"; sendHTTPResponse(connectionId, response); sendCommand(closeCommand, 1000, DEBUG); // fecha a conexão ) ) ) /*** **Verifique o temporizador para cada saída******/ if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer< millis())) { digitalWrite(OUTPUT1, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT2, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } if (OUTPUTTMRIsSet != 0 && (OUTPUTTimer < millis())) { digitalWrite(OUTPUT3, OUTPUTTMRState); OUTPUTstate = OUTPUTTMRState; OUTPUTTMRIsSet = 0; } /***************************************/ } /* Name: sendData Description: Функция, используемая для отправки данных на ESP8266. Params: command - данные/команда для отправки; timeout - время ожидания отклика; debug - печатать в консоль?(true = да, false = нет) Returns: Отклик от esp8266 (если есть отклик) */ String sendData(String command, const int timeout, boolean debug) { String response = ""; int dataSize = command.length(); char data; command.toCharArray(data, dataSize); esp8266_Write(data, dataSize); // передача символов на esp8266 if (debug) { Serial.println("\r\n====== HTTP Response From Arduino ======"); Serial.write(data, dataSize); Serial.println("\r\n========================================"); } long int time = millis(); while ((time + timeout) >millis()) ( while (esp8266_Available()) ( // esp tem dados, então imprima-os no console char c = esp8266_Read(); // leia o próximo caractere. resposta += c; ) ) if (debug) ( Serial .print(resposta); ) resposta de retorno; ) /* Nome: sendHTTPResponse Descrição: Uma função que envia uma resposta HTTP 200, HTML UTF-8 */ void sendHTTPResponse(int connectionId, String content) ( // cria uma resposta HTTP String httpResponse; String httpHeader; // cabeçalho HTTP httpHeader = " HTTP/1.1 200 OK\r\nTipo de conteúdo: text/html; charset=UTF-8\r\n"; httpHeader += "Comprimento do conteúdo: "; httpHeader += content.length(); httpHeader + = " \r\n"; httpHeader += "Conexão: close\r\n\r\n"; httpResponse = httpHeader + content + " "; // Há um bug no código: o último caractere em "content " não é enviado, então adicionei um espaço extra sendCIPData(connectionId, httpResponse); ) /* Nome: sendCIPDATA Descrição: envia o comando CIPSEND= ,<данные>*/ void sendCIPData(int connectionId, String data) ( String cipSend = "AT+CIPSEND="; cipSend += connectionId; cipSend += ","; cipSend += data.length(); cipSend += "\r\ n"; sendCommand(cipSend, 1000, DEBUG); sendData(data, 1000, DEBUG); ) /* Nome: sendCommand Descrição: Função utilizada para enviar dados ao ESP8266. Parâmetros: comando - dados/comando a enviar; timeout - tempo de espera de resposta; debug - imprime no console?(true = yes, false = no) Retorna: Resposta de esp8266 (se houver uma resposta) */ String sendCommand(String command, const int timeout, boolean debug) ( String response = ""; esp8266_Print(command ); // passando caracteres para esp8266 long int time = millis(); while ((time + timeout) > millis()) ( while (esp8266_Available()) ( // esp tem dados, então imprima-os no console char c = esp8266_Read(); // lê o próximo caractere.response += c; ) ) if (debug) ( Serial.print(response); ) return response; )

Aplicativo Android

Para controlar todos os componentes de hardware acima, usaremos um aplicativo Android simples. Esta aplicação nos permitirá ligar ou desligar a saída diretamente ou após um determinado período de tempo.

Observação: O aplicativo requer Android 4.0 (IceCreamSandwich) ou superior.

  • Em primeiro lugar, você deve saber o endereço IP do seu módulo. Se você usou uma porta serial de software, o endereço IP será impresso no console. Se você usou uma porta serial de hardware, deverá usar um cabo para monitorar os dados nas linhas RX e TX para ver o endereço IP. Você também precisa saber o número da porta especificado no esboço do Arduino. Depois disso, clique em “conectar” para obter o status de todas as três saídas. Você precisa ter certeza de que seu roteador Wi-Fi está ligado e conectado à rede local.
  • Agora clique em qualquer botão que deseja ligar/desligar. Sempre que quiser, você pode clicar em “atualizar” para atualizar o status de todas as saídas.
  • Na aba “Temporizadores” você pode configurar qualquer uma dessas três saídas para ligar/desligar após um determinado período de tempo (de 0 a 24 horas).
  • Após qualquer ação, você receberá uma mensagem de confirmação indicando se o comando foi concluído com sucesso ou ocorreu algum erro.

Vídeo de demonstração

Isso é tudo! Espero que o artigo tenha sido útil. Deixe comentários!