设为首页 收藏本站
查看: 1251|回复: 0

[经验分享] Microsoft Azure IoTHub Serials 1

[复制链接]

尚未签到

发表于 2017-6-30 07:16:16 | 显示全部楼层 |阅读模式
  Azure IoTHub的目标是为物联网的应用场景提供方便的设备接入,完成消息的发送和接收(C2D和D2C)。经过持续不断的努力,目前Azure IoTHub已经支持多种操作系统设备的接入,包括Android、Linux、mbed、TI RTOS、Windows等等,通过微软官方认证的设备更是多达上百种,大家可以通过网站(https://catalog.azureiotsuite.com/)查找设备。
  目前,Andorid设备的占据了移动设备市场头把交椅。微软也为Android设备接入Azure IoTHub提供了SDK。本篇文章讲述如何利用Android接入Azure IoTHub,完成消息的发送和接收。

1. 开发环境和工具需求
  开发环境和Android的开发环境一致,目前的标准配置就是JDK+Android Studio。
  需要使用的工具是Device Explore,可以去(https://github.com/Azure/azure-iot-sdks/releases)下载,用于Azure IoTHub设备的创建和消息的发送接收监控。

2. 利用Device Explore创建设备
  设备接入Azure IoTHub需要提供认证,该步骤可以通过Device Explore完成,具体方法如下:


  • 首先,参考文档(https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-create-through-portal)完成Azure IoTHub的创建。
  • 其次,打开Device Explore,在Configuration页面,配置Connect String,然后点击Update进行更新。
  • 最后,在管理(Management)页面,通过Create创建新的设备,输入名称(以MyAndroidDevice为例),点击创建,如下图所示。
DSC0000.png


3. 创建Android工程
  创建Andorid工程,在build.gradle文件中,加入对“iot-device-client:1.1.25”的依赖,如下:

    dependencies {
        // Remote binary dependency
        compile 'com.microsoft.azure.sdk.iot:iot-device-client:1.1.25'
    }
4. 编写xml界面文件

   为Activity_main.xml文件加入按钮控件和信息显示控件,如下图所示。
DSC0001.png

5. 编写后台java文件
  首先,在默认生成的代码基础上,引入如下几个需要用的包:

   import android.widget.Button;
   import android.widget.TextView;
   import com.microsoft.azure.sdk.iot.device.*;
   import android.os.Handler;
  其次,在MainActivity类中申明全局的变量如下:

   String connString = "此处需要填写Device Explore生成的连接字符串";
   String deviceId = "MyAndroidDevice";
   double temperature;
   double humidity;
   TextView info;
   static String rxinfo;
  其中,connString是步骤2中生成的Android设备的连接字符串,可以通过右键“Copy ConnectString”进行拷贝,复制到这里来。设备名称是MyAndroidDevice,后面申明了两个全局的变量,用于存放模拟的温度和湿度;rxinfo用于存放接收的Azure IotHub的数据。
  接着,为发送消息Send Message按钮添加监听事件,在用户点击时,完成模拟温湿度消息的发送,其代码如下:

   public void btnSendOnClick(View v) throws URISyntaxException, IOException {
    Button button = (Button) v;
    IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
    DeviceClient client = new DeviceClient(connString, protocol);
    try {
        client.open();
    }
    catch(IOException e1)
    {
        System.out.println("Exception while opening IoTHub connection: " + e1.toString());
    }
    catch(Exception e2)
    {
        System.out.println("Exception while opening IoTHub connection: " + e2.toString());
    }
    temperature = 20.0 + Math.random() * 10;
    humidity = 30.0 + Math.random() * 20;
    String msgStr = "{\"deviceId\":\"" + deviceId  + ",\"temperature\":"+ temperature +",\"humidity\":"+ humidity +"}";
    try
    {
        Message msg = new Message(msgStr);
        msg.setProperty("temperatureAlert", temperature > 28 ? "true" : "false");
        msg.setMessageId(java.util.UUID.randomUUID().toString());
        System.out.println(msgStr);
        EventCallback eventCallback = new EventCallback();
        client.sendEventAsync(msg, eventCallback,null);
    }
    catch (Exception e)
    {
    }
    client.close();
   }
  然后,为接收数据Receive Message添加监听事件,在用户点击时,接收Azure IoTHub的数据,其代码如下:

  public void btnReceiveOnClick(View v) throws URISyntaxException, IOException {
    Button button = (Button) v;

    IotHubClientProtocol protocol = IotHubClientProtocol.MQTT;
    DeviceClient client = new DeviceClient(connString, protocol);
    if (protocol == IotHubClientProtocol.MQTT)
    {
        MessageCallbackMqtt callback = new MessageCallbackMqtt();
        Counter counter = new Counter(0);
        client.setMessageCallback(callback, counter);
    }
    else
    {
        MessageCallback callback = new MessageCallback();
        Counter counter = new Counter(0);
        client.setMessageCallback(callback, counter);
    }
    try {
        client.open();
    }
    catch(IOException e1)
    {
        System.out.println("Exception while opening IoTHub connection: " + e1.toString());
    }
    catch(Exception e2)
    {
        System.out.println("Exception while opening IoTHub connection: " + e2.toString());
    }
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    client.close();
  }
  之后,在接收消息的回调函数中,进行数据的接收,并赋给全局的rxinfo,其代码如下:

protected static class MessageCallbackMqtt implements com.microsoft.azure.sdk.iot.device.MessageCallback
  {
    public IotHubMessageResult execute(Message msg, Object context)
    {
        Counter counter = (Counter) context;
        rxinfo= "Received message " + counter.toString() + " with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET);      
        counter.increment();
        return IotHubMessageResult.COMPLETE;
    }
  }
  另外,为了接收的数据能够更新到界面的textview控件,需要在MainActivity类中设置一个Handle,其代码如下:

   Handler mTimeHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {
        if (msg.what == 0) {
            info.setText(rxinfo);
            sendEmptyMessageDelayed(0, 1000);
        }
    }
   };
  最后,在MainActivity的onCreate生命周期事件中启动它,代码如下:

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    info=(TextView)findViewById(R.id.info);
    rxinfo="no rx message";
    mTimeHandler.sendEmptyMessageDelayed(0, 1000);
   }
6. 调试结果

    本应用程序在模拟器和Nexus 5设备上调试通过,应用程序启动以后,点击Send Message按键,发送一次消息给Azure IoTHub,可以在Device Explore的Data中进行监视,如下图所示。
DSC0002.png
    同样,为了演示Android设备接收Azure IoTHub的消息,可以在Device Explore的Message to Device中,发送一个hello world的消息,然后在Android应用程序中点击Receive Message进行数据的接收,显示在TextView控件上,如下图所示。
DSC0003.png

  源代码下载:链接

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389536-1-1.html 上篇帖子: Azure Storage Rest API Demo 下篇帖子: Azure 大数据分析架构数据流
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表