B4A Main
Sub Activity_Resume
' If IsPaused(MQTT) = False Then
' StopService(MQTT)
StartService(MQTT)
End Sub
Sub Activity_Pause (UserClosed As Boolean)
' MQTT.broker.Stop
' MQTT.MQTTClient.close
'StopService(MQTT)
ExitApplication
End Sub
B4A MQTT service
Sub Process_Globals
Dim broker As MqttBroker
Public MQTTClient As MqttClient
Dim bc As ByteConverter
End Sub
Sub Service_Start (StartingIntent As Intent)
Log("Starting Service")
broker.Initialize("", 51041) 'first parameter is the event name. It is currently not used.
broker.DebugLog = True
broker.start
MQTTClient.Initialize("MQTTClient", "tcp://127.0.0.1:51041", "Hub1")
MQTTClient.Connect
End Sub
Sub MQTTClient_Connected(Success As Boolean)
If Success Then
Log("client connected to broker")
Dim B4aClientSubscribeQos As Int = 1
LogColor(">>>>>>>>Suscribe QOS = " & B4aClientSubscribeQos, Colors.red)
MQTTClient.Subscribe("Hub", B4aClientSubscribeQos)
Else
Log("failed to connect client")
End If
End Sub
Sub MQTTClient_MessageArrived (Topic As String, Payload() As Byte)
Try
If Topic = "Hub" Then
Log(">>>>>>>>Received: " & bc.StringFromBytes(Payload, "utf8"))
Dim sendstring As String = "received from Sensor OK"
Dim B4aPublishQos As Int = 0
LogColor(">>>>>>>Publish: " & sendstring & " Publish QOS = " & B4aPublishQos, Colors.blue)
MQTTClient.Publish2("Client", sendstring.GetBytes("utf8"), B4aPublishQos, True)
End If
Catch
Log("M_A: " & LastException)
End Try
End Sub
Sub Service_Destroy
' MQTTClient.Close
' StopService(Me)
End Sub
B4R/ 8266 code
Sub Process_Globals
Public Serial1 As Serial
Dim MQTT As MqttClient
Public wifi As ESP8266WiFi
Dim wifiSocket As WiFiSocket
Dim Timer1 As Timer
End Sub
Private Sub AppStart
Serial1.Initialize(9600) '115200)
Delay(5000)
Log(CRLF, "AppStart")
Timer1.Initialize("Timer_Tick", 3000)
If WiFiConnect Then
Log("Wifi connected")
Else
Log("Wifi not connected")
Return
End If
MQTT.Initialize(wifiSocket.Stream, Array As Byte(192,168,1,5), 51041, "Client1", "Mqtt_MessageArrived", "Mqtt_Disconnected")
MQTTConnect(0)
End Sub
Sub WiFiConnect As Boolean
If wifi.Connect2("XXXXXXXXX", "YYYYYYYYY") Then
Return True
Else
'wifi.Disconnect
Return False
End If
End Sub
Sub MQTTConnect(unused As Byte)
Dim mo As MqttConnectOptions
mo.Initialize("","")
If MQTT.Connect2(mo) = False Then
Timer1.Enabled = False
Log("trying to connect to broker")
CallSubPlus("MQTTConnect", 1000, 0)
Return
End If
Log("Connected to broker")
MQTT.Subscribe("Client", 1)
Timer1.Enabled = True
End Sub
Sub Timer_Tick
Dim Data() As Byte = "Sent from Client1"
MQTT.Publish2("Hub", Data, True)
Log("Sent: ", Data)
End Sub
Sub Mqtt_MessageArrived (Topic As String, Payload() As Byte)
Log("Message arrived. Topic: ", Topic, "; Payload: ", Payload)
End Sub
Sub Mqtt_Disconnected
Log("Disconnected")
MQTT.Close
MQTTConnect(0)
End Sub