Les données circulent dans un seul sens (émetteur vers récepteur) | |
Les données circulent dans les 2 sens mais pas simultanément : bande passante utilisée en intégralité. |
Broche | Utilisation |
---|---|
Vcc | 5V |
A | entrée de récepteur non inverseuse sortie de pilote non inverseuse |
B | inversion de l'entrée du récepteur inversion de l'entrée du pilote |
GND | GND (0V) |
RO | Sortie du récepteur (RX) |
RE | Activation du récepteur (LOW Activé) |
DE | Activation de l’émetteur(HIGH Activé) |
DI | Entrée émetteur(TX) |
Le branchement
Emeteur | Récepteur | ||
---|---|---|---|
MAX485 | Arduino | MAX485 | Arduino |
Vcc | 5V | Vcc | 5V |
GND | GND | GND | GND |
RO | - | RO | RX |
RE | 5V | RE | GND |
DE | 5V | DE | GND |
DI | TX | DI | - |
Programmes | |||
Emeteur, en entrée A0 potentiomètre | Récepteur, en sortie D9 un servomoteur | ||
void setup() { Serial.begin(9600); } void loop() { int data= analogRead(0); byte angle= map(data, 0, 1023, 0, 180); Serial.write(angle); delay(50); } | #include |
Emeteur | Récepteur | ||
---|---|---|---|
MAX485 | Arduino | MAX485 | Arduino |
Vcc | 5V | Vcc | 5V |
GND | GND | GND | GND |
RO | RX | RO | RX |
RE | GPIO2 | RE | GPIO2 |
DE | GPIO2 | DE | GPIO2 |
DI | TX | DI | TX |
Programmes | |||
En entrée A0 potentiomètre | En entrée A0 potentiomètre | ||
const int ledPin = 13; // Built-in LED const int EnTxPin = 2; // HIGH:Transmitter, LOW:Receiver void setup() { Serial.begin(9600); Serial.setTimeout(100); pinMode(ledPin, OUTPUT); pinMode(EnTxPin, OUTPUT); digitalWrite(ledPin, LOW); digitalWrite(EnTxPin, HIGH); } void loop() { int rdata = analogRead(0); //data from potentiometer int angle= map(rdata, 0, 1023, 0, 180); //transmitter data packet Serial.print("I"); //initiate data packet Serial.print("S"); //code pour servo Serial.print(angle); //servo angle data Serial.print("F"); //finish data packet delay(50); //receiver data packet Serial.print("I"); //initiate data packet Serial.print("L"); //code for sensor Serial.print("F"); //finish data packet Serial.flush(); digitalWrite(EnTxPin, LOW); //RS485 as receiver if(Serial.find("i")) { int data=Serial.parseInt(); if(Serial.read()=='f') //finish reading { onLED(data); } } digitalWrite(EnTxPin, HIGH); //RS485 as transmitter } void onLED(int data) { if(data>500) digitalWrite(ledPin, HIGH); else digitalWrite(ledPin, LOW); } | #include <Servo.h> Servo myservo; const int EnTxPin = 2; void setup () { Serial.begin (9600); myservo.attach (9); pinMode(EnTxPin, OUTPUT ); digitalWrite (EnTxPin, LOW ); } void loop (){ if ( Serial.available ()){ if ( Serial.read () == 'I' ){ char function = Serial.read (); if (function == 'S' ){ int angle = Serial.parseInt (); if ( Serial.read () == 'F' ){ if (angle <= 180) { myservo.write (angle); } } } else if (function == 'L' ){ if ( Serial.read () == 'F' ){ int val = analogRead (0); digitalWrite (EnTxPin, HIGH ); //enable to transmit Serial.print ( "i" ); Serial.print (val); Serial.println ( "f" ); Serial.flush (); digitalWrite (EnTxPin, LOW ); //enable to receive } } } } delay (10); } |
/* Un exemple de programme de connexion au complexe cloud DispSky avec transfert de données vers l'interface RS485 Si vous avez des questions sur le fonctionnement du programme et sur l'ensemble du complexe dans son ensemble, vous pouvez contacter le service d'assistance technique : http://dispsky.ru/podderzhka/tehpodderzhka/ */ #include#define HEART_BEAT_TIME 30 #define TIMER_SEND 50 #define BUFFER_LEN 300 const char* ssid = "SSID"; const char* password ="PASSWORD"; //IPAddress serverDispSky { 192, 168, 34, 221 }; char serverDispSky [] = "s1.dispsky.ru"; //Adresse du serveur DispSky const int port = 5010; //Port du serveur DispSky char* heartbeat = "ARDUINO_0002"; //Le code de connexion, vous devez créer votre propre code unique et spécifier le même dans votre compte DispSky uint8_t bufferIn[BUFFER_LEN], bufferOut[BUFFER_LEN]; int lenBufIn, lenBufOut, m_lenBufIn; unsigned long timerHeartBeat, timerIn, timerOut; byte bufferFlagIn, bufferFlagOut; WiFiClient DispSkyClient; void setup() { WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.begin(115200, SERIAL_8N1); if(DispSkyClient.connect(serverDispSky, port)) DispSkyClient.write(heartbeat, 12); pinMode(2, OUTPUT); //Lors de l'utilisation de GPIO 2 digitalWrite(2, LOW); //pinMode(0, OUTPUT); //Lors de l'utilisation de GPIO 0 //digitalWrite(0, LOW); } void loop() { bridge(); } void bridge() { lenBufIn = DispSkyClient.available(); if (millis() - timerHeartBeat > (unsigned long) HEART_BEAT_TIME * 1000 ) { timerHeartBeat = millis(); DispSkyClient.stop(); DispSkyClient.connect(serverDispSky, port); DispSkyClient.write(heartbeat, 12); } if (lenBufIn > 0) { timerHeartBeat = millis(); timerIn = millis(); bufferFlagIn = true; DispSkyClient.read(bufferIn, lenBufIn); m_lenBufIn = lenBufIn; } if (bufferFlagIn && millis() - timerIn > TIMER_SEND) { bufferFlagIn = false; digitalWrite(2, HIGH); //Lors de l'utilisation de GPIO 2 //digitalWrite(0, HIGH); //Lors de l'utilisation de GPIO 0 Serial.write(bufferIn, m_lenBufIn); delay(5); digitalWrite(2, LOW); //Lors de l'utilisation de GPIO 2 //digitalWrite(0, LOW); //Lors de l'utilisation de GPIO 0 } if (Serial.available() > 0) { bufferFlagOut = true; timerOut = millis(); while (Serial.available()) { bufferOut[lenBufOut] = Serial.read(); lenBufOut++; if (lenBufOut >= BUFFER_LEN - 1) lenBufOut = 0; } } if (bufferFlagOut && millis() - timerOut > TIMER_SEND) { bufferFlagOut = false; DispSkyClient.write(bufferOut, lenBufOut); lenBufOut = 0; } }