如何在Android中使用Adafruit IO连接MQTT客户端?

时间:2018-02-06 06:30:40

标签: android arduino

我正在开发Android应用。在这个应用程序中,我使用MQTT服务器来控制家庭设备与Wifi家庭自动化。后端团队使用Adafruit IO进行MQTT服务器连接。我不熟悉Adafruit IO和MQTT客户端代码。请帮助我使用Adafruit IO MQTT API。

后台应用如何连接到服务器,在数据库中注册设备?还要获取从服务器返回的IOT ID,密钥和提要。

这些细节必须提供给设备并保存。使用这些详细信息,该应用程序将能够订阅和发布与该设备相关的任何更新。

2 个答案:

答案 0 :(得分:0)

请阅读文件

Adafruit IO是一个使数据有用的系统。我们的重点是易用性,并允许简单的数据连接,只需很少的编程。

IO包括client libraries,它们包含我们的REST和MQTT API。 IO建立在Ruby on Rails和Node.js。

之上

MQTT或消息队列遥测传输是Adafruit IO支持的设备通信协议。使用MQTT库或客户端,您可以发布和订阅源以发送和接收订阅源数据。

答案 1 :(得分:0)

出于测试目的,您可以使用MQTT.fx软件并将其安装在您的PC上。MQTT.fx download

进入设置并提供经纪人详细信息(adafruitt.io)并在MQTT中提供connect.So,您的经纪人是服务器,发布者和订阅者都是客户。发布者和订阅者使用主题名称交换数据。

在Android中,我可以为您提供MQTT客户端(发布者和订阅者)的示例代码

1.创建Android客户端,如下所示 创建客户端后,使用正确的客户端ID指定客户端的保持活动和超时。如果要发布和订阅,请在应用程序中使用。您可以考虑创建2个MQTT客户端实例。

              mpub = new MqttAndroidClient(context, 
              mqttBrokerURL, PublisherClientID, new MemoryPersistence())
              MqttConnectOptions options = null;
              options = new MqttConnectOptions();
              options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
              options.setConnectionTimeout(60);
              options.setKeepAliveInterval(120);
              options.setCleanSession(true);
  1. 修改您的发布和订阅主题,假设您必须发布,您可以设置有效负载。然后发布数据。

    messagePublisher.setPayload((msg.toString()).getBytes());
    try {
         mpub.connect(options, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken iMqttToken) {
    
                    try {
                         mpub.publish(Topic, 
                       messagePublisher.getPayload(), Qos, retain);
    
                    } catch (MqttException | NullPointerException e) {
                        e.printStackTrace();
                    }
    
                }
                @Override
                public void onFailure(IMqttToken iMqttToken_p, Throwable 
           throwable) {
    
                    disconnect();
                }
            });
    
        } catch (MqttException | NullPointerException ex) {
    
        }
    

    //上面的代码可用于将数据发布到客户端

  2. 3.对于订阅创建新的MQTT客户端,请执行所有常规设置(保留 有效,超时,加密,用户名,密码),最后设置回调和 实现MQTT回调以获取重写函数。

    // subscribe refer this method :
       SimpleClient(){
        try {
            client = new MqttClient(MQTT_BROKER, "myID");
            client.connect();
            client.setCallback(this);
            client.subscribe("my/subscription/topic");
        } catch (MqttException e) {
            e.printStackTrace();
        }
      }
      public void messageArrived(String s, MqttMessage mqttMessage) throws 
      Exception {
        System.out.println("Here I am");
        // get subscribed mssg here
      } 
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        // not needed
      }
      public void connectionLost(Throwable throwable) {
        }
    }
    

    有关详细信息,请参阅eclipse paho

    供参考:

    您需要使用以下详细信息将MQTT客户端连接到Adafruit IO:

    **Host**: io.adafruit.com
    **Port**: 1883 or 8883 (for SSL encrypted connection)
    **Username**: your Adafruit account username (see the accounts.adafruit.com 
    **Password**: your Adafruit IO key (click the AIO Key button on a dashboard 
     find the key)
     Adafruit IO's MQTT API exposes feed data using special topics.  You can 
     publish a new value for a feed to its topic, or you can subscribe to a 
     feed's topic to be notified when the feed has a new value. Anyone of the 
     following topic forms is valid for a feed:
     (username)/feeds/(feed name or key)
     (username)/f/(feed name or key)