Arduino: Ethernet: mudanças entre as edições
Linha 59: | Linha 59: | ||
;Autoria: '''Matheus Marques''' / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu | ;Autoria: '''Matheus Marques''' / CST Análise e Desenvolvimento de Sistemas - IFPR - Câmpus Foz do Iguaçu | ||
==Comunicação com o Ethernet Shield== | ==Comunicação com o Ethernet Shield== |
Edição das 19h52min de 29 de outubro de 2021
Comunicação e Shields para Arduíno
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 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 com Módulo Bluetooth
O módulo Bluetooth permite interagir com o Arduíno, por exemplo, utilizando um aplicativo em um smartphone.
Um módulo Bluetooth bastante utilizado é o HC06 (ver: http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06):
Pinagem e conexão com o Arduíno
Este módulo apresenta 6 pinos, mas com apenas 4 pinos é possível colocar o mesmo para funcionar e fazer o Arduíno interagir dispositivos Bluetooth.
_________ | | | | | | |Bleutooth| | | | HC06 | | | | | |_________| | | | | Vcc ----+ | | +---- Txd Gnd ------+ +------ Rxd
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
Teste do módulo bluetooth
- PhysicalPixel
- Permite acender e apagar led a partir de aplicativo Android pareado com módulo Bluetooth:
- Carregar no Arduíno o programa exemplo Arquivo/Exemplos/Communication/PhysicalPixel;
- Abrir aplicativo Bluetooth Terminal e parear com módulo Bluetooth;
- Acender a apagar led 13 com caracteres H e L.
Exemplos de programas de aplicação
Fonte: http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06
- Echo Code
- Permite enviar uma string ao Arduíno via Bluetooth e receber de volta a mesma string no monitor serial.
String message; //string that stores the incoming message void setup() { Serial.begin(9600); //set baud rate } void loop() { while(Serial.available()) {//while there is data available on the serial monitor message+=char(Serial.read());//store string from serial command } if(!Serial.available()) { if(message!="") {//if data is available Serial.println(message); //show the data message=""; //clear the data } } delay(1000); //delay }
- Led Code
- Permite acender e apagar um led conectado ao Arduíno enviando caracteres via Bluetooth de um smartphone ou outro dispositivo Bluetooth.
char blueToothVal; //value sent over via bluetooth char lastValue; //stores last state of device (on/off) void setup() { Serial.begin(9600); pinMode(13,OUTPUT); } void loop() { if(Serial.available()) {//if there is data being recieved blueToothVal=Serial.read(); //read it } if (blueToothVal=='n') {//if value from bluetooth serial is n digitalWrite(13,HIGH); //switch on LED if (lastValue!='n') Serial.println(F("LED is on")); //print LED is on lastValue=blueToothVal; } else if (blueToothVal=='f') {//if value from bluetooth serial is n digitalWrite(13,LOW); //turn off LED if (lastValue!='f') Serial.println(F("LED is off")); //print LED is on lastValue=blueToothVal; } delay(1000); }
Smartphone Android
Para enviar caracteres de um Smartphone Android para o módulo Bluetooth pode-se utilizar aplicativos como o Bluetooth Serial Port Terminal ou Bluetooth V2.1 SPP Terminal
- 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.
Referências
- Adaptação e autoria
- --Evandro.cantu (discussão) 19h00min de 12 de agosto de 2015 (BRT)