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
   3   4   5   6   7   8   9   10   11   12   13