Jak przesłać obraz z GIGA Display Shield za pomocą WIFI do laptopa. Napisz program z wykorzystaniem #include "stm32h7xx.h"
#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
Arduino_GigaDisplayTouch TouchDetector;
#include "Arduino_GigaDisplay_GFX.h"
Aby przesłać obraz z GIGA Display Shield za pomocą Wi-Fi do laptopa, należy wykorzystać moduł Wi-Fi wbudowany w Arduino GIGA R1 WiFi oraz odpowiednie biblioteki do obsługi wyświetlacza i komunikacji sieciowej. Poniżej przedstawiam szczegółowy program, który realizuje to zadanie, wraz z wyjaśnieniem kroków implementacji.
Arduino_H7_Video.h
, Arduino_GigaDisplayTouch.h
i Arduino_GigaDisplay_GFX.h
do obsługi wyświetlacza i panelu dotykowego.WiFi.h
.#include "stm32h7xx.h"
#include "Arduino_H7_Video.h"
#include "lvgl.h"
#include "Arduino_GigaDisplayTouch.h"
#include "Arduino_GigaDisplay_GFX.h"
#include <WiFi.h>
// Konfiguracja Wi-Fi
const char* ssid = "TwojaSiecWiFi"; // Nazwa sieci Wi-Fi
const char* password = "TwojeHasloWiFi"; // Hasło do sieci Wi-Fi
// Adres IP i port serwera na laptopie
IPAddress serverIP(192, 168, 1, 100); // Zmień na adres IP swojego laptopa
const int serverPort = 8080;
WiFiClient client;
Arduino_GigaDisplay_GFX display;
Arduino_GigaDisplayTouch TouchDetector;
void setup() {
Serial.begin(115200);
// Inicjalizacja wyświetlacza
display.begin();
display.fillScreen(BLACK);
// Inicjalizacja panelu dotykowego
TouchDetector.begin();
// Połączenie z siecią Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Łączenie z siecią Wi-Fi...");
}
Serial.println("Połączono z siecią Wi-Fi");
Serial.print("Adres IP: ");
Serial.println(WiFi.localIP());
}
void loop() {
if (client.connect(serverIP, serverPort)) {
Serial.println("Połączono z serwerem");
// Przechwycenie obrazu z wyświetlacza
uint16_t* frameBuffer = (uint16_t*)display.getFramebuffer();
int width = display.width();
int height = display.height();
// Wysłanie informacji o rozmiarze obrazu
client.write((uint8_t*)&width, sizeof(width));
client.write((uint8_t*)&height, sizeof(height));
// Wysłanie danych obrazu
client.write((uint8_t*)frameBuffer, width * height * sizeof(uint16_t));
Serial.println("Obraz wysłany");
client.stop();
} else {
Serial.println("Nie udało się połączyć z serwerem");
}
delay(1000); // Opóźnienie między wysyłaniem kolejnych klatek
}
Serwer na laptopie:
Możesz użyć prostego serwera HTTP w Pythonie:
from http.server import SimpleHTTPRequestHandler, HTTPServer
class MyHandler(SimpleHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
with open("received_image.bmp", "wb") as f:
f.write(post_data)
self.send_response(200)
self.end_headers()
server = HTTPServer(('0.0.0.0', 8080), MyHandler)
print("Serwer działa na porcie 8080")
server.serve_forever()
Przesyłanie obrazu z GIGA Display Shield do laptopa za pomocą Wi-Fi wymaga:
Kod przedstawiony powyżej jest podstawowym rozwiązaniem, które można dostosować do własnych potrzeb. Warto rozważyć optymalizację przesyłania danych, np. poprzez kompresję obrazu.