Skocz do zawartości

Arduino MEGA R3 + Żyroskop MPU6050 + Adafruit 16-channels PWM/Servo


Pomocna odpowiedź

Ok, dzięki, nie zacieły się. Tylko chodzi o to, że program piszę na adruino, a ESP wykorzystuje tylko jako wifi. Komendy AT. nie mogę znaleźć przykłady jak takiego stringa( strone html) wysłać.

Cześć,

ja bym napisał "web server" (w Arduino) na ESP8266, a UART'a użył do komunikacji między tym serwerem a ATmegą (do wysyłania komend odebranych przez stronę WWW na tym serwerze).

Pozdrawiam

OK, postawiłem stronę w html bezpośrednio na ESP, działa w przeglądarce, teraz potrzebuje info jak przesłać kilka zmienny z arduino do ESP przez uart. Strona ma tylko wyświetlać info, nic nie sterować.

  • Lubię! 1
OK, postawiłem stronę w html bezpośrednio na ESP, działa w przeglądarce, teraz potrzebuje info jak przesłać kilka zmienny z arduino do ESP przez uart. Strona ma tylko wyświetlać info, nic nie sterować.

Gratulacje,

zrobione samemu lepiej smakuje 😉

W tych linkach znajdziesz przykłady kodu do takiej komunikacji:

https://forum.arduino.cc/index.php?topic=441146.0

https://forum.arduino.cc/index.php?topic=480247.0

https://forum.arduino.cc/index.php?topic=441146.0

http://randomnerdtutorials.com/sending-data-from-an-arduino-to-the-esp8266-via-serial/

https://arduino.stackexchange.com/questions/40116/serial-communication-between-esp8266-and-arduino-uno?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

  • Lubię! 1

Odpoczywam chwilowo od komunikacja, ponieważ przyszła tarcza do serw i odziwo wsadziłem ją w mega + zasilanie i działa 🙂 Nie musiałem się umęczyć. Czekam na żyroskop, że sprawdzić.

Odpoczywam chwilowo od komunikacja, ponieważ przyszła tarcza do serw i odziwo wsadziłem ją w mega + zasilanie i działa 🙂 Nie musiałem się umęczyć. Czekam na żyroskop, że sprawdzić.

Cześć,

z żyroskopem będzie najtrudniejsza część. Czy zamierzasz użyć filtru Kalmana, tak jak opisywało kilku kolegów przed Tobą na forum. Patrz linki:

https://www.forbot.pl/forum/topics50/mpu6050-calkowanie-sygnalu-zyroskopu-vt15207.htm

https://www.forbot.pl/forum/topics50/filtr-kalmana-model-stanowy-dla-pomiaru-zyroskop-magnetometr-vt14669.htm

A tutaj teoria:

https://forbot.pl/blog/filtr-kalmana-w-praktyce-3-przyklady-z-kodami-id7342

https://forbot.pl/blog/filtr-kalmana-teorii-praktyki-1-id2855

Pozdrawiam

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
}

Bo int intowi nierówny - w Arduino ma 16 bitów a w ESP 32 bity.

Nie wiem jak z kompatybilnością floatów, ale zamiast int użyj int16_t albo int32_t.

  • Lubię! 1

Ok, poprawiłem strukturę, ale dane dalej się przesuwają ;/

O jak wywaliłem boola to jest ok 😃 Teraz czaje.

Podobno warto jeszcze checksum zrobić.

  • 1 miesiąc później...

Zajmuje się aktualnie żyroskopem i niestety ma problemy z nim. Odczyt danych jest jakby z kosmosu, liczby skaczą nawet gdy się nie rusza. Korzystam z bibliotek p. Jarzębskiego. Spotkał się ktoś z takim problemem? Skaczą nawet po setkami. Zapisuje je to flotów. Interesuje mnie odczyt stopni od włączenia modelu(Żyroskopu).

Doradzi ktoś jaką bibliotekę wybrać, gdy program wykonuje się np 2 ms lub 4 ms. Na gołym programie jest ok, ale gdy we wale do kodu wszystko co chce to zaczyna głupieć ten odczyt.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...