Page 8 - Revista_60.pub
P. 8
TEMA DA CAPA
RASPBERRY PI + ESP8266 = “LIGHT”
Num relé básico existem três contactores: normalmente
aberto (NO), normalmente fechado (NC) e comum (COM). Em WiFiServer server(23);
WiFiClient serverClients[MAX_SRV_CLIENTS];
nenhum dos estados possíveis de entrada, o COM é conecta-
do ao NC. Quando a tensão de operação é aplicada, a bobina // 192.168.4.1, deve ser substituído pelo IP
do relé fica energizada e o COM entra em contato com NO. //que o leitor quiser dar ao ESP8266
Diferentes configurações de relés estão disponíveis como int led = 5;
SPST, SPDT, DPDT, etc, que têm diferentes números de con- String commandString;
tatos. Usando a combinação adequada de contactores, o cir-
cuito elétrico pode ser ligado e desligado. void setup() {
delay(1000);
O terminal COM é o terminal comum. Se os terminais da bobi- Serial.begin(115200);
ne forem energizados com a tensão nominal, os terminais /* password */
COM e NO terão continuidade. Se os terminais da bobine não WiFi.softAP(ssid, password);
estiverem energizados, os terminais COM e NO não terão IPAddress myIP = WiFi.softAPIP();
continuidade.
O terminal NC é o terminal normalmente fechado. É o // start telnet server
terminal que pode ser ligado mesmo que o relé não receba server.begin();
server.setNoDelay(true);
tensão suficiente para operar. }
O terminal NO é o terminal normalmente aberto. É o
terminal em que se coloca a saída desejada quando o relé void loop()
{
recebe sua tensão nominal. Se não houver tensão nos termi- uint8_t i;
nais da bobine ou tensão insuficiente, a saída estará aberta e if(server.hasClient()){
não receberá tensão. Quando os terminais da bobine recebem digitalWrite(led, HIGH);
} else{
a tensão nominal ou um pouco abaixo, o terminal NO recebe digitalWrite(led, LOW);
tensão suficiente e pode ligar o dispositivo na saída. }
//check if there are any new clients
if (server.hasClient()){
for(i = 0; i < MAX_SRV_CLIENTS; i++)
Após esta breve explicação teórica, passemos então {
//find free/disconnected spot
à segunda fase do projecto: o código! if (!serverClients[i] || !serverClients
[i].connected())
O código deve ser carregado usando o Arduino IDE {
ou o PlatformIO, como já descrito em edições anteriores da if(serverClients[i]) serverClients
PROGRAMAR. [i].stop();
serverClients[i] = server.available();
(Para efectuar o upload do código no ESP8266, mais uma commandString = ""; //clear the
vez recordamos ao leitor que, caso tenha dúvidas neste pas- //commandString variable
server.println("--> Type your command and
so, p deve rever a edição 54 da PROGRAMAR). hit Return... otherwise leave me alone!");
continue;
Do lado do NodeMCU é implementado um servidor de }
telnet, extremamente simples, onde apenas um utilizador }
pode estar ligado de cada vez, dado que o único utilizador //no free/disconnected spot so reject
será o próprio Raspberry Pi. Este servidor, aceita um número WiFiClient serverClient = server.available();
serverClient.stop();
limitado de comandos, dado que serão apenas os necessá- }
rios para ligar e desligar uma lâmpada. O leitor pode imple-
mentar mais comandos seguindo o código que se encontra //check clients for data
for(i = 0; i < MAX_SRV_CLIENTS; i++)
abaixo. Para tornar este exemplo mais simples, o IP do ES- {
P8266 é definido de forma estática, no código abaixo. if (serverClients[i] && serverClients
[i].connected())
{
if(serverClients[i].available())
Código do ESP8266 {
char newChar = serverClients[i].read();
#include <ESP8266WiFi.h> if (newChar == 0x0D) //If a 0x0D is
#include <WiFiClient.h> //received, a Carriage Return, then evaluate the
//command
//limite de clients ligados = 1 (alterar o valor {
da constante para o número de utilizadores dese- //server.print("Received this
jado) //command: ");
#define MAX_SRV_CLIENTS 1 //server.print(commandString);
processCommand(commandString);
/* definicoes da rede local */ } else
const char *ssid = "pinetwork"; {
const char *password = "password"; Serial.println(newChar);
commandString += newChar;
8