Prévia do material em texto
Você me informou que está desenvolvendo no Android Studio. Com isso, os scripts em Python que forneci não serão diretamente úteis para você. No ambiente Android, o desenvolvimento de aplicativos para comunicação MQTT será em Java ou Kotlin, e a lógica de comunicação será diferente. Passo a passo para acionar um LED usando MQTT em Android Studio 1. Requisitos e Ferramentas · Android Studio instalado. · Dispositivo Android (ou emulador) para rodar o app. · A biblioteca Eclipse Paho MQTT Client para Android. Ela é a implementação oficial do Paho para Android. Você precisa adicioná-la ao seu projeto. · Um broker MQTT (Mosquitto, HiveMQ, etc.). 2. Adicionando a dependência do MQTT ao seu projeto Android 1. Abra seu projeto no Android Studio. 2. Nos arquivos libs.versions.toml, build.gradle (Module: app), adicione a seguinte dependência dentro do bloco dependencies: mqttclient="1.2.5" mqttservice="1.1.1" ... mqttclient = { group = "org.eclipse.paho", name = "org.eclipse.paho.client.mqttv3", version.ref = "mqttclient" } mqttservice = { group = "org.eclipse.paho", name = "org.eclipse.paho.android.service", version.ref = "mqttservice" } Libs buildTypes { release { isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } debug { isDebuggable = true } } … implementation(libs.mqttclient) implementation(libs.mqttservice) Module:app 3. Clique em "Sync Now" para sincronizar seu projeto com a nova dependência. 3. Permissões de Internet Seu aplicativo precisará de permissões para se conectar à internet. Adicione as seguintes linhas no seu arquivo AndroidManifest.xml, dentro da tag e antes da tag : *.acvbr.com network_security_config.xml 4. Desenvolvendo a Lógica no Android (Exemplo em Kotlin) Você precisará de um arquivo de layout (XML) para a interface do usuário e um arquivo de classe (Kotlin ou Java) para a lógica. Exemplo de Layout (activity_main.xml): XML Exemplo de Lógica (MainActivity.kt): Este é o script principal. Ele se conectará ao broker MQTT e publicará mensagens quando os botões forem clicados. import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Button import org.eclipse.paho.client.mqttv3.* class MainActivity : AppCompatActivity() { private lateinit var mqttClient: MqttClient // Substitua pelo seu broker se for usar um privado private val brokerUri = "tcp://mqtt.eclipseprojects.io:1883" private val clientId = MqttClient.generateClientId() private val topic = "led/control" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) connectToMqttBroker() val buttonOn: Button = findViewById(R.id.buttonOn) val buttonOff: Button = findViewById(R.id.buttonOff) buttonOn.setOnClickListener { publishMessage("on") } buttonOff.setOnClickListener { publishMessage("off") } } private fun connectToMqttBroker() { try { mqttClient = MqttClient(brokerUri, clientId, MqttDefaultFilePersistence(cacheDir.absolutePath)) val options = MqttConnectOptions() options.isAutomaticReconnect = true options.isCleanSession = true mqttClient.connect(options) Log.d("MQTT", "Conectado ao broker MQTT") } catch (e: MqttException) { Log.e("MQTT", "Erro de conexão: ${e.message}") e.printStackTrace() } } private fun publishMessage(message: String) { if (!mqttClient.isConnected) { Log.d("MQTT", "Cliente não conectado. Tentando reconectar...") connectToMqttBroker() return } try { val mqttMessage = MqttMessage(message.toByteArray()) mqttClient.publish(topic, mqttMessage) Log.d("MQTT", "Mensagem publicada no tópico '$topic': $message") } catch (e: MqttException) { Log.e("MQTT", "Erro ao publicar mensagem: ${e.message}") e.printStackTrace() } } override fun onDestroy() { super.onDestroy() if (mqttClient.isConnected) { try { mqttClient.disconnect() Log.d("MQTT", "Desconectado do broker.") } catch (e: MqttException) { e.printStackTrace() } } } } Kotlin Exemplo de Lógica (MainActivity.java): Este é o script principal. Ele se conectará ao broker MQTT e publicará mensagens quando os botões forem clicados. import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import org.eclipse.paho.client.mqttv3.IMqttMessageListener; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence; public class MainActivity extends AppCompatActivity { private MqttClient mqttClient; // Substitua pelo seu broker se for usar um privado private final String brokerUri = "tcp://mqtt.eclipseprojects.io:1883"; private final String clientId = MqttClient.generateClientId(); private final String topic = "led/control"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); connectToMqttBroker(); Button buttonOn = findViewById(R.id.buttonOn); Button buttonOff = findViewById(R.id.buttonOff); buttonOn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { publishMessage("on"); } }); buttonOff.setOnClickListener(new View.OnClickListener() { @Override public void void onClick(View v) { publishMessage("off"); } }); } private void connectToMqttBroker() { try { mqttClient = new MqttClient(brokerUri, clientId, new MqttDefaultFilePersistence(getCacheDir().getAbsolutePath())); MqttConnectOptions options = new MqttConnectOptions(); options.setAutomaticReconnect(true);options.setCleanSession(true); mqttClient.connect(options); Log.d("MQTT", "Conectado ao broker MQTT"); } catch (MqttException e) { Log.e("MQTT", "Erro de conexão: " + e.getMessage()); e.printStackTrace(); } } private void publishMessage(String message) { if (mqttClient == null || !mqttClient.isConnected()) { Log.d("MQTT", "Cliente não conectado. Tentando reconectar..."); connectToMqttBroker(); return; } try { MqttMessage mqttMessage = new MqttMessage(message.getBytes()); mqttClient.publish(topic, mqttMessage); Log.d("MQTT", "Mensagem publicada no tópico '" + topic + "': " + message); } catch (MqttException e) { Log.e("MQTT", "Erro ao publicar mensagem: " + e.getMessage()); e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); if (mqttClient != null && mqttClient.isConnected()) { try { mqttClient.disconnect(); Log.d("MQTT", "Desconectado do broker."); } catch (MqttException e) { e.printStackTrace(); } } } } Java 5. Lógica no Dispositivo de Controle (Raspberry Pi/ESP32) Lembre-se que este aplicativo Android é o Publicador. Você ainda precisará de um dispositivo que atuará como assinante. Este dispositivo se conectará ao mesmo broker, assinará o tópico led/control e, quando receber as mensagens on ou off, acionará ou desligará o LED fisicamente. A lógica de código para o assinante será a mesma que descrevi no primeiro passo a passo, mas a escolha da linguagem (Python, C++, etc.) dependerá do microcontrolador ou dispositivo que você está utilizando.