Witam, żyroskop narazie będę wykorzystywał tylko do zwalniania modelu i do skręcania o określoną ilość stopni.
Ruszyłem komunikacje. Na str wyświetlam dane ze struct 😃 wysyłam dane z atmega do esp, ale nie pokrywają się, jakby się dane przesuwały. jakaś porada?
ATMEga:
//komunikacja Arduino z ESP8266
struct Dane
{
float x;
float y;
float z;
float wilgotnosc;
float temperatura;
int air;
int gaz;
int szybkosc;
bool alarm;
};
Dane dane;
//timery
#include <Timers.h>
Timer ms25;
Timer ms100;
Timer ms1000;
void setup() {
//uart
Serial.begin(115200);
Serial3.begin(115200);
//timery
ms25.begin( 25 );
ms100.begin( 100 );
ms1000.begin( 1000 );
}
void loop() {
//timer 1s
if( ms1000.available() )
{
dane.x = 1; dane.y = 1; dane.z = 1; dane.wilgotnosc = 60; dane.temperatura = 22; dane.air = 20; dane.gaz = 30; dane.szybkosc = 120; dane.alarm = false;
const char* wys = (const char*) &dane;
for( int i = 0; i < sizeof(dane); i++ ) Serial3.print( *wys++);
Serial3.println();
ms1000.restart();
}
}
ESP:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "asd"; // SSID sieci WiFi
const char* password = "12345678"; // hasło do WiFi
//numer portu serwera www
const unsigned int port = 80;
// ustaw port serwera
ESP8266WebServer server(port);
//komunikacja Arduino z ESP8266
struct Dane
{
float x;
float y;
float z;
float wilgotnosc;
float temperatura;
int air;
int gaz;
int szybkosc;
bool alarm;
};
Dane dane;
void setup() {
//ustaw szybkość portu szeregowego
Serial.begin(115200);
//włącz WiFi
WiFi.mode(WIFI_STA); //tryb STATION
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { // czekaj na połączenie z WiFi
delay(500);
Serial.print(".");
}
//wypisz przydzioleny IP i MAC dla tego urządzenia
Serial.println("");
Serial.println("WiFi połączone");
Serial.println(WiFi.localIP());
Serial.println(WiFi.macAddress());
//uruchom serwery www
server_on();
}
void loop(){
server.handleClient();
if (Serial.available() > sizeof( dane ))
{
char* odbr = ( char* ) &dane;
for (int i = 0; i < sizeof( dane ); i++) *odbr++ = Serial.read();
Serial.read();
}
}
String Head_HTML()
{
String head = "<!DOCTYPE html>\n";
head += "<html>";
head += "<head>";
head += "<title>STRAZNIK_DOMU</title>";
head += "<meta charset=\"utf-8\">";
head += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
head += "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\" >";
head += "</head>";
head += "<body style=\"text-align: center;color: white; background: black;font-size: 1.5em;\">\n";
return head;
}
String Foot_HTML()
{
String foot = "";
foot += "<p>zioloiso © 2018</p></td></tr>";
foot += "</body>\n";
foot += "</html>\n";
return foot;
}
String Page_HTML(){
String page = "";
page += "<p><h3><b>DANE ZE STRAZNIKA</b></h3></p></br>\n";
page += "<p><h3>Wilgotnosc: "+ String( dane.wilgotnosc ) +"%, Temperatura: "+ String( dane.temperatura ) +"*C </h3></p>\n";
page += "<p><h3>Zyroskop[ x = "+ String( dane.x ) +" | y = "+ String( dane.y ) +" | z = "+ String( dane.z ) +" ] </h3></p>\n";
page += "<p><h3>Stezenie gazow latwopalnych: "+ String( dane.gaz ) +"% </h3></p>\n";
page += "<p><h3>Stezenie substacji latwopalnych i dymu: "+ String( dane.air ) +"% </h3></p>\n";
page += "<p><h3>Predkosc poruszania straznika: "+ String( dane.air ) +"% </h3></p>\n";
page += "<p><h3> Alarm: "+ String( dane.alarm ) +" </h3></p></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br></br>\n";
return page;
}
String WebPage(){
return Head_HTML()+Page_HTML()+Foot_HTML();
}
void server_on( void ){
//adres główny
server.on("/", [](){
server.send(200, "text/html", WebPage());
});
server.begin(); // Start serwera www
}