Arduino: Ethernet: mudanças entre as edições
Linha 323: | Linha 323: | ||
---- | ---- | ||
[[Categoria:Arduíno]] | [[Categoria:Arduíno]] [[Categoria:IoT]] |
Edição das 13h50min de 8 de maio de 2020
Comunicação e Shields para Arduíno
Controlando Leds pelo Monitor Serial
- Componentes necessários
- Placa Arduino;
- Conector Arduino
- Protoboard;
- 5 fios com conectores macho;
- 2 resistores de 220 ohm(Vermelho, vermelho, marrom);
- 2 Leds.
- Montagem
- Primeiramente, faça as ligações como mostra a imagem abaixo:
- Agora, abra a IDE do Arduino e passe a seguinte programação
char c; void setup(){ pinMode(2,OUTPUT); pinMode(3,OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { c = Serial.read() - '0'; Serial.flush(); digitalWrite(c,!digitalRead(c)); } }
- Instruções
- Conecte o Arduino no PC, selecione a versão do seu Arduino e a porta e clique em UPLOAD. Abra o Serial Monitor, ao digitar o número 2 no Serial Monitor, irá acender o LED conectado na porta digital 2 do Arduino, e ao digitar novamente o número 2, o LED apagará. Agora se digitar o número 3, irá acender o LED da porta digital 3 e se digitar novamente o número 3, o LED apagará.
- Autoria
- Igor Matheus B. Quintana / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu.
Comunicação Serial
- Informações sobre comunicação serial e paralela
- Comunicação Serial entre dois Arduínos
- Emissor
- Receptor
Código do Arduíno emissor
//emissor int num = 0; void setup(){ Serial.begin(9600); } void loop(){ num = 0; Serial.write(num); delay(2000); num = 1; Serial.write(num); delay(2000); }
Código do Arduíno receptor
//receptor int recByte; int led = 13; void setup(){ Serial.begin(9600); pinMode(led,OUTPUT); } void loop(){ if (Serial.available ()> 0) { recByte = Serial.parseInt(); //parseInt() retorna o primeiro número inteiro válido do buffer serial. //Caracteres e não inteiros são ignorados. } if(recByte == 0){ digitalWrite(led,LOW); }else if(recByte == 1){ digitalWrite(led,HIGH); } }
Arduíno Leonardo
O Arduíno Leonardo usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX) deve-se utilizar a Serial1.
- Autoria
- Matheus Marques / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu
Comunicação sem fio com Wireless Shield e Xbee
O Wireless Shield permite a comunicação serial sem fio baseado no módulo Xbee da Digi.
Configuração do Wireless Shield
A placa Wireless Shield possui uma chave de configuração da comunicação serial entre o módulo Xbee e o microcontrolador do Arduino e o conversor serial USB (ver: https://www.arduino.cc/en/Main/ArduinoWirelessShield):
- Posição micro: O pino Dout do módulo Wireless é conectado ao pino RX do microcontrolador do Arduino e o pino Din ao pino TX do microcontrolador. O módulo sem fio se comunica de forma serial com o microcontrolador do Arduino. Destaca-se que os pinos TX e RX do microcontrolador também continuam conectados aos pinos RX e TX do conversor serial USB. Desta forma, dados transmitidos pelo microcontrolador serão enviados simultaneamente ao módulo sem fio e a serial USB. Neste modo o microcontrolador do Arduino não pode ser programado via USB.
- Posição USB: O pino Dout do módulo Wireless é conectado ao pino RX do conversor serial USB e o pino Din ao pino TX do conversor serial USB. O módulo sem fio se comunica diretamente com o computador. Para usar este modo o microcontrolador do Arduíno deve ser programado com um sketch vazio:
void setup() { } void loop() { }
- Xbee Explorer USB
- A placa Wireless Shield com a chave na posição USB e o microcontrolador do Arduíno programado com sketch vazio se comporta como um módulo Xbee Explorer USB, com o Xbee se comunicando diretamente com o computador.
Exemplo de utilização
Exemplo de comunicação usando a configuração padrão dos módulos Xbee, apresentado em https://www.arduino.cc/en/Guide/ArduinoWirelessShield:
- Para fazer a carga de programas no microcontrolador do Arduíno, colocar a chave do módulo wireless na posição USB.
- Em um dos Arduínos com módulo Wireless carregar o programa
Exemples->Communication->Physical Pixel
- Este programa faz o Arduíno acender ou apagar o led da porta 13 a partir do envio do caracter H ou L a partir do monitor serial. Testar o funcionamento do programa com a chave do módulo wireless na posição USB. Em seguida desconectar o Arduíno da interface USB e mudar a chave do módulo wireless para a posição micro.
// Physical Pixel const int ledPin = 13; // the pin that the LED is attached to int incomingByte; // a variable to read incoming serial data into void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte == 'H') { digitalWrite(ledPin, HIGH); } if (incomingByte == 'L') { digitalWrite(ledPin, LOW); } } }
- Em outro Arduíno com módulo wireless, carregar o programa abaixo com chave do módulo wireless na posição USB. Verificar o funcionamento do programa no monitor serial. Depois de carregado o programa mudar a chave do módulo wireless para a posição micro.
void setup() { Serial.begin(9600); } void loop() { Serial.print('H'); delay(1000); Serial.print('L'); delay(1000); }
- Para testar a comunicação serial sem fio, conectar o primeiro Arduíno na fonte de alimentação e verificar se a comunicação entre os Arduínos acontece, fazendo o led piscar.
- Caso não haja comunicação, tente restabelecer a configuração padrão (default) nos módulos Xbee (veja abaixo).
Arduíno Leonardo
O Arduíno Leonardo usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX) deve-se utilizar a Serial1.
Endereçamento dos módulos Xbee
Vários parâmetros precisam ser configurados para que os módulos Xbee possam se comunicar:
- Os dispositivos precisam estar na mesma rede, definida pelo parâmetro ID;
- Os dispositivos precisam usar o mesmo canal, definido pelo parâmetro CH;
- O endereço destino (DH e DL) determina qual módulo da rede receberá os dados:
- Se o DH = 0 e o DL < 0xFFFF (i.e. 16 bits), o dado transmitido pelo módulo será recebido por qualquer módulo cujo endereço de 16-bit MY é igual a DL;
- Se o DH = 0 e o DL = 0xFFFF, o dado transmitido será recebido por todos os módulos (broadcast);
- Se o DH ≠ 0 e o DL > 0xFFFF, o dado transmitido será recebido somente pelo módulo cujo número serial seja igual ao endereço destino (i.e. SH = DH e SL = DL).
Síntese de alguns parâmetros:
Parâmetro | Descrição | Valor default |
ID | Identificador de rede | 3332 |
CH | Canal | C |
SH SL | Numero de série | Diferente para cada módulo |
MY | Endereço do módulo | 0 |
DH DL | Endereço destino | 0 |
BD | Vazão da comunicação serial (bps) | 3 (9600 bps) |
Configuração do módulo Xbee
Para a configuração do módulo Xbee é interessante utilizar o software XCTU da Digi ou o moltosenso Network Manager, os quais apresentam facilidades para configuração e atualização dos módulos wireless.
- Exemplo de configuração com o software moltosenso Network Manager
- Baixar e instalar o software moltosenso Network Manager IRON 1.0 (Free):
- Na guia Port Setup é possível verificar a configuração da porta, clique em Open Port e verifique se o dispositivo foi detectado;
- Clique no dispositivo e verifique as informações do mesmo em Current Device;
- Na guia Node Settings é possível selecionar o módulo e verificar seus parâmetos de configuração;
- Para restaurar os parâmetros default do dispositivo clique em Restore All e depois em Write Permanently;
- Adaptação e autoria
- --Evandro.cantu (discussão) 20h19min de 12 de julho de 2015 (BRT)
Comunicação com o Ethernet Shield
Este exemplo mostra como utilizar o Ethernet Shield juntamente com o Arduíno para criar um Web Server que forneça informações sobre sensores conectados a entradas analógicas (Ver: https://www.arduino.cc/en/Tutorial/WebServer).
Usando a biblioteca Ethernet.h, o Arduíno pode responder a requisições HTTP através do Ethernet Sheild.
O Ethernet Shield permite conectar o controlador Ethernet WizNet ao Arduíno usando o barramento SPI. O barramento SPI (Serial Peripheral Interface) é um interface de comunicação serial síncrona usada para comunicação em distâncias curtas, e usa a biblioteca SPI.h. O barramento SPI usa os pinos 10, 11, 12 e 13 do Arduíno para implementar a conexão SPI com o WizNet. O Ethernet Shield possui ainda um slot para cartão SD e usa o pino 4 para controlar o pino de seleção do cartão SD.
Exemplo
/* Web Server para fornecer a temperatura usando sensor LM35 O sensor de temperatura (LM35) é conectado a entrada analógica 0 do Arduino. Based in Sketche: Arduino -> Ethernet -> BarometricPressureWebServer by Tom Igoe (2010) */ #include <Ethernet.h> #include <SPI.h> // assign a MAC address for the ethernet controller. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // assign an IP address for the controller: IPAddress ip(192,168,1,20); IPAddress gateway(192,168,1,1); IPAddress subnet(255, 255, 255, 0); // Initialize the Ethernet server library EthernetServer server(80); //Sensor de temperatura LM35 //ConversaoGrausCelcius = 5 / 1023 * 100 = 0,488758553 const float ConversaoGrausCelcius = 0.488758553; float SensorLM35; void setup() { Serial.begin(9600); // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); delay(1000); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // Faz a leitura do sensor periodicamente. Serial.print('.'); SensorLM35 = analogRead(A0) * ConversaoGrausCelcius; // listen for incoming Ethernet connections: listenForEthernetClients(); delay(1000); } void listenForEthernetClients() { // listen for incoming clients EthernetClient client = server.available(); if (client) { Serial.println("Got a client"); // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n' && currentLineIsBlank) { // send a standard http response header client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); // output the value of temperature client.print("Temperatura interna (oC) = "); client.print(SensorLM35); client.println("</html>"); break; } if (c == '\n') { currentLineIsBlank = true; } else if (c != '\r') { currentLineIsBlank = false; } } } delay(1); client.stop(); Serial.println("client disonnected"); } }
Comunicação Serial via Bluetooth
- Pinagem e conexão com o Arduíno
- Será utilizado o módulo Bluetooth HC06 [1], que possui 4 pinos para conexão com o Arduíno, como mostrado na figura:
_________ | | | | | | |Bleutooth| | | | HC06 | | | | | |_________| | | | | Vcc ----+ | | +---- Rxd Gnd ------+ +------ Txd
- Cuidados com a conexão do módulo Bluetooth HC06 com o Arduíno:
- O HC06 funciona com alimentação Vcc=3,3V, a qual também é fornecida pelo Arduino ao lado da alimentação de 5V;
- Na comunicação serial, como o Arduíno fornece 5V, é necessário utilizar um divisor de tensão na entrada Rxd do HC06, conforme exemplo abaixo:
VRxd = R2/(R1 + R2).5
- Exemplo:
R1=470 Ω, R2=1 KΩ -> VRxd = 3,4 V
Arduíno Mega Multi Serial
O Arduíno MEGA usa a Serial exclusivamente para comunicação com a porta USB. Para comunicação serial TTL (5V) nos pinos 0 (RX) and 1 (TX), como a que será utilizada com o módulo Bluetooth, deve-se utilizar a Serial1, Serial2 ou Serial3 [2].
Referências
- Adaptação e autoria
- --Evandro.cantu (discussão) 19h00min de 12 de agosto de 2015 (BRT)