#include // Include the WiFi library #include // Include the MQTT library const char* ssid = "iPhone Ernesto (2)"; // WiFi network name (SSID) const char* password = "****"; // WiFi password const char* mqtt_server = "broker.hivemq.com"; // MQTT broker server address WiFiClient espClient; // Create a WiFi client instance PubSubClient client(espClient); // Create a MQTT client instance void setup() { Serial.begin(115200); // Start the serial communication setup_wifi(); // Setup WiFi connection client.setServer(mqtt_server, 1883); // Set the MQTT broker server and port } void setup_wifi() { delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); // Connect to WiFi network while (WiFi.status() != WL_CONNECTED) { // Wait for WiFi connection delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // Print local IP address } void reconnect() { while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect("SeeeduinoXIAO")) { // Attempt to connect to MQTT broker Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" trying again in 5 seconds"); delay(5000); // Wait 5 seconds before retrying } } } void loop() { if (!client.connected()) { reconnect(); // If MQTT connection is lost, attempt to reconnect } client.loop(); // Maintain MQTT connection and handle incoming messages if (Serial.available()) { // Check if data is available on serial port String angle = Serial.readStringUntil('\n'); // Read serial input until newline character int angleValue = angle.toInt(); // Convert string to integer if (angleValue >= 0 && angleValue <= 180) { // Check if angle value is within valid range client.publish("servo/angle", angle.c_str()); // Publish angle value to MQTT topic Serial.print("Sent: "); Serial.println(angle); // Print sent angle value to serial monitor } } }