This example shows how to subscribe to a MQTT broker over TLS.
- MICROEJ SDK 6.
- A VEE Port that contains:
- EDC-1.3 or higher
- BON-1.4 or higher
- NET-1.1 or higher
- SSL-2.2 or higher
This example has been tested on:
- Android Studio with MicroEJ plugin for Android Studio 0.3.0.
- STM32F7508-DK VEE Port 2.2.0.
Follow MICROEJ SDK 6 Installation Guide to setup the SDK.
By default, the sample will use the STM32F7508-DK VEE Port.
Refer to the Select a VEE Port documentation for more information.
A running MQTT broker is required in order to run this example. You shall ensure that the broker is reachable from your development machine (if running the sample on Simulator) or from your target device.
By default, the sample will use the following broker: test.mosquitto.org
.
To use another broker:
- Update the MQTT URL in HelloWorldConstants.java.
- Download the broker server's certificate (e.g.
broker.com.crt
). - Drop it into the folder certificates/.
- Add a new line in mqtt.resources.list with the path to the certificate (e.g.
certificates/broker.com.crt
). - Add a new line in paho.certificates.list with the path to the certificate (e.g.
/certificates/broker.com.crt
).
In Android Studio:
- Open the Gradle tool window by clicking on the elephant icon on the right side,
- Expand the
Tasks
list, - From the
Tasks
list, expand themicroej
list, - Double-click on
runOnSimulator
, - The application starts, the traces are visible in the Run view.
Alternative ways to run in simulation are described in the Run on Simulator documentation.
Make sure to properly setup the VEE Port environment before going further. Refer to the VEE Port README for more information.
In Android Studio:
- Open the Gradle tool window by clicking on the elephant on the right side,
- Expand the
Tasks
list, - From the
Tasks
list, expand themicroej
list, - Double-Click on
runOnDevice
. - The device is flashed. Use the appropriate tool to retrieve the execution traces.
Alternative ways to run on device are described in the Run on Device documentation.
In a Multi-Sandbox context, the network callback registered at the application startup should be unregistered when the application stops.
Find below an implementation example:
public static final Logger LOGGER = Logger.getLogger("[Subscriber]");
private MqttClient client;
private Thread thread;
private boolean subscribe;
private SimpleNetworkCallbackAdapter simpleNetworkCallbackAdapter;
/**
* Stops the publishing and unregister the network state listener.
*/
@Override
public synchronized void stop() {
subscribe = false;
disconnect();
ConnectivityManager connectivityManager = ServiceFactory.getService(ConnectivityManager.class);
if (connectivityManager != null && simpleNetworkCallbackAdapter != null) {
connectivityManager.unregisterNetworkCallback(simpleNetworkCallbackAdapter);
}
simpleNetworkCallbackAdapter = null;
}
private synchronized void disconnect() {
MqttClient client = this.client;
this.client = null;
if (client != null) {
try {
client.disconnect();
LOGGER.info("Client disconnected");
} catch (MqttException e) {
LOGGER.fine(e.getMessage());
}
}
}
All dependencies are retrieved transitively by Gradle.
N/A
None.
Markdown
Copyright 2019-2024 MicroEJ Corp. All rights reserved.
Use of this source code is governed by a BSD-style license that can be found with this software.