Sunteți pe pagina 1din 11

PROTOCOALE ȘI INTERFEȚE DE COMUNICAȚIE ÎN

SISTEME MECATRONICE
LABORATOARELE: 5,6
Data: 31.03.2022
Laborator 5: Achiziția datelor pe portul analogic
Placa de dezvoltare cu ESP32
1. Descriere schemă hardware
2. Utilizare porturi analogice
Laborator 6: Aplicații
3. Scriere programe pentru placa de dezvoltare
 Mediază valorile citite
4. Aplicații cu potențiometrul
 Aprinde/stinge led-uri la valori predefinite citite de pe potențiometru
5. Interfațare cu un sistem Wi-Fi
 Afișează pe o pagină web valorile citite de la
- Potențiometru
- Senzorul TME
- Acționează un servomotor și afișează valorile trimise către servo
A. Potențiometrul este conectat la pinul 34, ADC6.

Fig.1 – Afișarea valorilor generate de potențiometru, care aprind/sting led-ul

Codul în Arduino:
#define POTENTIOMETER_PIN 34 // ESP32 pin GIOP36 (ADC0) connected to Potentiometer pin
#define LED_PIN 4 // ESP32 pin GIOP21 connected to LED's pin
#define ANALOG_THRESHOLD 20

void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT); // set ESP32 pin to output mode
}

void loop() {
int analogValue = analogRead(POTENTIOMETER_PIN); // read the input on analog pin
Serial.println(analogValue);
delay(500);
if (analogValue > ANALOG_THRESHOLD) {
digitalWrite(LED_PIN, HIGH); // turn on LED
Serial.println("turn on LED"); }
else {
digitalWrite(LED_PIN, LOW); // turn off LED
Serial.println("turn off LED");
}
}

B. Afișarea valorilor citite de la potențiometru pe pagină de web


Potențiometrul este conectat la pinul 34, și senzorul de temperatură LM35 este conectat la pinul 33.
Codul în Arduino:

/*********
Rui Santos
Complete project details at https://randomnerdtutorials.com
*********/

// Load Wi-Fi library


#include <WiFi.h>

// Replace with your network credentials


const char* ssid = "ESP32-Access-Point";
const char* password = "123456789";

// Set web server port number to 80


WiFiServer server(80);

// Variable to store the HTTP request


String header;

// Auxiliar variables to store the current output state


String output26State = "off";
String output27State = "off";

const int potPin = 34;


// Assign output variables to GPIO pins
const int output26 = 26;
const int output27 = 27;
int potValue = 0;

void setup() {
Serial.begin(115200);
delay(1000);

// Connect to Wi-Fi network with SSID and password


Serial.print("Setting AP (Access Point)…");
// Remove the password parameter, if you want the AP (Access Point) to be open
WiFi.softAP(ssid, password);

IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);

server.begin();
}

void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
// Reading potentiometer value
potValue = analogRead(potPin);
Serial.println(potValue);
delay(500);

if (client) { // If a new client connects,


Serial.println("New Client."); // print a message out in the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println("Refresh: 0.1"); // refresh the page automatically every 5 sec
client.println();

// Display the HTML web page


client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////POTENTIOMETRU//////////////////

// variable for storing the potentiometer value

// Web Page Heading


client.println("<body><h1>Potentiometru</h1>");
client.println(potValue);
delay(1000);
// The HTTP response ends with another blank line
client.println();
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}

C. Afișarea pe pagină de web valorile citite de la senzorul de temperatură


Codul în Arduino:
// Load Wi-Fi library
#include <WiFi.h>
#include "esp_adc_cal.h"
#define LM35_Sensor1 33

int LM35_Raw_Sensor1 = 0;
float LM35_TempC_Sensor1 = 0.0;
float LM35_TempF_Sensor1 = 0.0;
float Voltage = 0.0;

// Replace with your network credentials


const char* ssid = "ESP32-Access-Point";
const char* password = "123456789";

// Set web server port number to 80


WiFiServer server(80);

// Variable to store the HTTP request


String header;

// Auxiliar variables to store the current output state


String output26State = "off";
String output27State = "off";

const int potPin = 34;


// Assign output variables to GPIO pins
const int output26 = 26;
const int output27 = 27;
int potValue = 0;

void setup() {
Serial.begin(115200);
delay(1000);

// Connect to Wi-Fi network with SSID and password


Serial.print("Setting AP (Access Point)…");
// Remove the password parameter, if you want the AP (Access Point) to be open
WiFi.softAP(ssid, password);

IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);

server.begin();
}

void loop(){
WiFiClient client = server.available(); // Listen for incoming clients
// Reading potentiometer value
potValue = analogRead(potPin);
Serial.print("Potensiometru = ");
Serial.println(potValue);
delay(500);
//////////////////////////////////////////////////////////Temperatura/////////////////////////////
// Read LM35_Sensor1 ADC Pin
LM35_Raw_Sensor1 = analogRead(LM35_Sensor1);
// Calibrate ADC & Get Voltage (in mV)
Voltage = readADC_Cal(LM35_Raw_Sensor1);
// TempC = Voltage(mV) / 10
LM35_TempC_Sensor1 = Voltage / 10;
LM35_TempF_Sensor1 =(LM35_TempC_Sensor1 * 1.8) + 32;

// Print The Readings


Serial.print("Temperatura = ");
Serial.print(LM35_TempC_Sensor1);
Serial.print(" °C , ");
Serial.print("Temperature = ");
Serial.print(LM35_TempF_Sensor1);
Serial.println(" °F");

delay(100);

if (client) { // If a new client connects,


Serial.println("New Client."); // print a message out in the serial port
String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected()) { // loop while the client's connected
if (client.available()) { // if there's bytes to read from the client,
char c = client.read(); // read a byte, then
Serial.write(c); // print it out the serial monitor
header += c;
if (c == '\n') { // if the byte is a newline character
// if the current line is blank, you got two newline characters in a row.
// that's the end of the client HTTP request, so send a response:
if (currentLine.length() == 0) {
// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
// and a content-type so the client knows what's coming, then a blank line:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println("Refresh: 0.1"); // refresh the page automatically every 5 sec
client.println();

// Display the HTML web page


client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");

////////////////////////////////////////////////////////////PRINTARE///////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////POTENTIOMETRU//////////////////
client.println("<body><h1>Potentiometru</h1>");
client.println("Potentiometru=");
client.println(potValue);
delay(1000);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Temperatura/////////
client.print("Temperatura = ");
client.print(LM35_TempC_Sensor1);
client.print(" grade Celsius ");

// The HTTP response ends with another blank line


client.println();
// Break out of the while loop
break;
} else { // if you got a newline, then clear currentLine
currentLine = "";
}
} else if (c != '\r') { // if you got anything else but a carriage return character,
currentLine += c; // add it to the end of the currentLine
}
}
}
// Clear the header variable
header = "";
// Close the connection
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}

}
uint32_t readADC_Cal(int ADC_Raw)
{
esp_adc_cal_characteristics_t adc_chars;

esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, 1100, &adc_chars);


return(esp_adc_cal_raw_to_voltage(ADC_Raw, &adc_chars));
}
D. Interfațare cu un sistem Wi-Fi – Acționând un servomotor și afișarea valorilor trimise către servo

Codul în Arduino:
/*********

Rui Santos

Complete project details at https://randomnerdtutorials.com

*********/

#include <WiFi.h>

#include <Servo.h>

Servo myservo; // create servo object to control a servo

// twelve servo objects can be created on most boards

// GPIO the servo is attached to

static const int servoPin = 13;

// Replace with your network credentials

const char* ssid = "GI3";

const char* password = "M0im.2o19";

// Set web server port number to 80

WiFiServer server(80);

// Variable to store the HTTP request

String header;

// Decode HTTP GET value

String valueString = String(5);

int pos1 = 0;

int pos2 = 0;

// Current time

unsigned long currentTime = millis();


// Previous time

unsigned long previousTime = 0;

// Define timeout time in milliseconds (example: 2000ms = 2s)

const long timeoutTime = 2000;

void setup() {

Serial.begin(115200);

myservo.attach(servoPin); // attaches the servo on the servoPin to the servo object

// Connect to Wi-Fi network with SSID and password

Serial.print("Connecting to ");

Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

// Print local IP address and start web server

Serial.println("");

Serial.println("WiFi connected.");

Serial.println("IP address: ");

Serial.println(WiFi.localIP());

server.begin();

void loop(){

WiFiClient client = server.available(); // Listen for incoming clients

if (client) { // If a new client connects,

currentTime = millis();

previousTime = currentTime;

Serial.println("New Client."); // print a message out in the serial port

String currentLine = ""; // make a String to hold incoming data from the client
while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected

currentTime = millis();

if (client.available()) { // if there's bytes to read from the client,

char c = client.read(); // read a byte, then

Serial.write(c); // print it out the serial monitor

header += c;

if (c == '\n') { // if the byte is a newline character

// if the current line is blank, you got two newline characters in a row.

// that's the end of the client HTTP request, so send a response:

if (currentLine.length() == 0) {

// HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)

// and a content-type so the client knows what's coming, then a blank line:

client.println("HTTP/1.1 200 OK");

client.println("Content-type:text/html");

client.println("Connection: close");

client.println();

// Display the HTML web page

client.println("<!DOCTYPE html><html>");

client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");

client.println("<link rel=\"icon\" href=\"data:,\">");

// CSS to style the on/off buttons

// Feel free to change the background-color and font-size attributes to fit your preferences

client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial; margin-left:auto; margin-


right:auto;}");

client.println(".slider { width: 300px; }</style>");

client.println("<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>");

// Web Page

client.println("</head><body><h1>ESP32 with Servo</h1>");

client.println("<p>Position: <span id=\"servoPos\"></span></p>");

client.println("<input type=\"range\" min=\"0\" max=\"180\" class=\"slider\" id=\"servoSlider\"


onchange=\"servo(this.value)\" value=\""+valueString+"\"/>");

client.println("<script>var slider = document.getElementById(\"servoSlider\");");


client.println("var servoP = document.getElementById(\"servoPos\"); servoP.innerHTML = slider.value;");

client.println("slider.oninput = function() { slider.value = this.value; servoP.innerHTML = this.value; }");

client.println("$.ajaxSetup({timeout:1000}); function servo(pos) { ");

client.println("$.get(\"/?value=\" + pos + \"&\"); {Connection: close};}</script>");

client.println("</body></html>");

//GET /?value=180& HTTP/1.1

if(header.indexOf("GET /?value=")>=0) {

pos1 = header.indexOf('=');

pos2 = header.indexOf('&');

valueString = header.substring(pos1+1, pos2);

//Rotate the servo

myservo.write(valueString.toInt());

Serial.println(valueString);

// The HTTP response ends with another blank line

client.println();

// Break out of the while loop

break;

} else { // if you got a newline, then clear currentLine

currentLine = "";

} else if (c != '\r') { // if you got anything else but a carriage return character,

currentLine += c; // add it to the end of the currentLine

// Clear the header variable

header = "";

// Close the connection

client.stop();

Serial.println("Client disconnected.");
Serial.println("");

S-ar putea să vă placă și