搜索
bottom↓
回复: 118

STM32+W5500+MQTT+Android实现远程数据采集及控制

  [复制链接]

出0入0汤圆

发表于 2015-8-10 14:04:46 | 显示全部楼层 |阅读模式
0 前言
最近在学习MQTT,发现MQTT还是挺好用的,于是花了点时间做了一个简单的应用示例,希望能给需要做这方面的人一些参考。
相关背景知识:http://www.embed-net.com/thread-224-1-1.html
具体功能为:
1,STM32F405为主控芯片,它通过传感器采集环境数据,比如温度,湿度,光照度,大气压强等;
2,主控芯片通过W5500模块将测量的数据通过MQTT协议方式发布到MQTT服务器(服务器域名和IP见固件程序);
3,主控订阅LED灯控制的消息,当接收到对应的控制指令后点亮或者熄灭对应的LED灯;
4,安卓手机端订阅传感器数据的消息,当接收到消息后将传感器数据在界面显示;
5,安卓手机可发送点亮或者熄灭LED灯的指令到服务器,然后服务器会将该指令转发给STM32主控,然后STM32主控解析该指令并执行指令。

1 单片机端实现
MQTT协议是基于TCP的协议,所以我们只需要在单片机端实现TCP客户端代码之后就很容易移植MQTT了,STM32F4+W5500实现TCP客户端的代码我们以前已经实现过,代码下载地址为:
http://www.embed-net.com/thread-87-1-1.html
当然,如果你想在代码里面直接使用服务器域名方式进行连接,我们还得在TCP客户端代码里面集成DNS的代码,当然在上面这个连接里面也有相关的代码。
MQTT代码源码下载地址:
http://www.eclipse.org/paho/
在STM32这边我们使用的是C/C++ MQTT Embedded clients代码。
硬件连接如下图所示:

1.1 MQTT的移植
MQTT的移植非常简单,将C/C++ MQTT Embedded clients的代码添加到工程中,然后我们只需要再次封装4个函数即可:
int transport_sendPacketBuffer(unsigned char* buf, int buflen);
int transport_getdata(unsigned char* buf, int count);
int transport_open(void);
int transport_close(void);

transport_sendPacketBuffer:通过网络以TCP的方式发送数据;
transport_getdata:TCP方式从服务器端读取数据,该函数目前属于阻塞函数;
transport_open:打开一个网络接口,其实就是和服务器建立一个TCP连接;
transport_close:关闭网络接口。
如果已经移植好了socket方式的TCP客户端的程序,那么这几个函数的封装也是非常简单的,程序代码如下所示:
/**
  * @brief  通过TCP方式发送数据到TCP服务器
  * @param  buf 数据首地址
  * @param  buflen 数据长度
  * @retval 小于0表示发送失败
  */
int transport_sendPacketBuffer(unsigned char* buf, int buflen)
{
  return send(SOCK_TCPS,buf,buflen);
}
/**
  * @brief  阻塞方式接收TCP服务器发送的数据
  * @param  buf 数据存储首地址
  * @param  count 数据缓冲区长度
  * @retval 小于0表示接收数据失败
  */
int transport_getdata(unsigned char* buf, int count)
{
  return recv(SOCK_TCPS,buf,count);
}


/**
  * @brief  打开一个socket并连接到服务器
  * @param  无
  * @retval 小于0表示打开失败
  */
int transport_open(void)
{
  int32_t ret;
  //新建一个Socket并绑定本地端口5000
  ret = socket(SOCK_TCPS,Sn_MR_TCP,5000,0x00);
  if(ret != SOCK_TCPS){
    printf("%d:Socket Error\r\n",SOCK_TCPS);
    while(1);
  }else{
    printf("%d:Opened\r\n",SOCK_TCPS);
  }

  //连接TCP服务器
  ret = connect(SOCK_TCPS,domain_ip,1883);//端口必须为1883
  if(ret != SOCK_OK){
    printf("%d:Socket Connect Error\r\n",SOCK_TCPS);
    while(1);
  }else{
    printf("%d:Connected\r\n",SOCK_TCPS);
  }     
    return 0;
}
/**
  * @brief  关闭socket
  * @param  无
  * @retval 小于0表示关闭失败
  */
int transport_close(void)
{
  close(SOCK_TCPS);
  return 0;
}


完成了这几个函数,然后我们就可以根据官方提供的示例代码实现我们自己的代码了,比如我们向代理服务器发送一个消息的代码如下所示:
/**
  * @brief  向代理(服务器)发送一个消息
  * @param  pTopic 消息主题
  * @param  pMessage 消息内容
  * @retval 小于0表示发送失败
  */
int mqtt_publish(char *pTopic,char *pMessage)
{
  int32_t len,rc;
  MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
  unsigned char buf[200];
  MQTTString topicString = MQTTString_initializer;
  int msglen = strlen(pMessage);
  int buflen = sizeof(buf);

  data.clientID.cstring = "me";
  data.keepAliveInterval = 5;
  data.cleansession = 1;
  len = MQTTSerialize_connect(buf, buflen, &data); /* 1 */

  topicString.cstring = pTopic;
  len += MQTTSerialize_publish(buf + len, buflen - len, 0, 0, 0, 0, topicString, (unsigned char*)pMessage, msglen); /* 2 */

  len += MQTTSerialize_disconnect(buf + len, buflen - len); /* 3 */
  transport_open();
  rc = transport_sendPacketBuffer(buf,len);
  transport_close();
    if (rc == len)
        printf("Successfully published\n\r");
    else
        printf("Publish failed\n\r");
  return 0;
}

下面我们看下主函数的代码,思路也比较清晰:
int main(void)
{
  static char meassage[200];
  int rc;
  char *led;
  char led_value;
  float temperature,humidity,light,pressure;
  srand(0);
  //配置LED灯引脚
  LED_Config();
    //初始化配置网络
    network_init();
  while(1){
    memset(meassage,0,sizeof(meassage));
    //订阅消息
    rc = mqtt_subscrib("pyboard_led",meassage);
    printf("rc = %d\n\r",rc);
    if(rc >= 0){
      printf("meassage = %s\n\r",meassage);
      //解析JSON格式字符串并点亮相应的LED灯
      cJSON *root = cJSON_Parse(meassage);
      if(root != NULL){
        led = cJSON_GetObjectItem(root,"led")->valuestring;
        printf("led = %s\n\r",led);
        led_value = cJSON_GetObjectItem(root,"value")->valueint;
        if(!strcmp(led,"red")){
          if(led_value){
            LED_On(LED_RED);
          }else{
            LED_Off(LED_RED);
          }
        }else if(!strcmp(led,"green")){
          if(led_value){
            LED_On(LED_GREEN);
          }else{
            LED_Off(LED_GREEN);
          }
        }else if(!strcmp(led,"blue")){
          if(led_value){
            LED_On(LED_BLUE);
          }else{
            LED_Off(LED_BLUE);
          }
        }else if(!strcmp(led,"yellow")){
          if(led_value){
            LED_On(LED_YELLOW);
            printf("Yellow On\n\r");
          }else{
            LED_Off(LED_YELLOW);
            printf("Yellow Off\n\r");
          }
        }
        // 释放内存空间  
        cJSON_Delete(root);
      }else{
        printf("Error before: [%s]\n\r",cJSON_GetErrorPtr());  
      }
    }
    delay_ms(500);
    //获取传感器测量数据,该示例使用随机数
    temperature = rand()%50;
    humidity = rand()%100;
    light = rand()%1000;
    pressure = rand()%1000;
    //将数据合成为JSON格式数据
    sprintf(meassage,"{\"temperature\":%.1f,\"humidity\":%.1f,\"light\":%.1f,\"pressure\":%.1f}",temperature,humidity,light,pressure);
    //将数据发送出去
    mqtt_publish("pyboard_value",meassage);
  }
}

完整工程代码可在后面的附件下载。

2 手机端代码实现
手机端我们也使用官方提供的Java库Java client and utilities,下载地址:
http://www.eclipse.org/paho/
将jar文件添加到工程中即可,程序界面如下所示:

上面4个条目分别显示STM32单片机通过W5500发送到服务器端的传感器测量数据;
下面4个图片分别控制板子上的4个LED灯;
消息发送我们采用线程的方式发送,接收采用回调函数方式接收消息。

2.1 实现消息发送
发送消息的代码如下所示:
/**
   * send message
   */
  class PublishThread extends Thread {
      String topic;
      MqttMessage message;
      int qos = 0;
      MemoryPersistence persistence = new MemoryPersistence();
      PublishThread(String topic,String message){
          this.topic = topic;
          this.message = new MqttMessage(message.getBytes());
      }
      public void sendMessage(String topic,String message){
          this.topic = topic;
          this.message = new MqttMessage(message.getBytes());
          run();
      }
      @Override
      public void run() {
          try {
              MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
              MqttConnectOptions connOpts = new MqttConnectOptions();
              connOpts.setCleanSession(true);
              connOpts.setKeepAliveInterval(1);
              System.out.println("Connecting to broker: " + broker);
              sampleClient.connect(connOpts);
              System.out.println("Connected");
              System.out.println("Publishing message: " + message.toString());
              message.setQos(qos);
              sampleClient.publish(topic, message);
              System.out.println("Message published");
              sampleClient.disconnect();
              System.out.println("Disconnected");
          }catch(MqttException me) {
              System.out.println("reason "+me.getReasonCode());
              System.out.println("msg "+me.getMessage());
              System.out.println("loc "+me.getLocalizedMessage());
              System.out.println("cause "+me.getCause());
              System.out.println("excep "+me);
              me.printStackTrace();
          }
      }
  }


2.2 实现消息接收
接收消息的代码如下所示:
/**
  * receive message
  */
class SubscribeThread extends Thread{
     final String topic;
     MemoryPersistence persistence = new MemoryPersistence();
     SubscribeThread(String topic){
         this.topic = topic;
     }
     @Override
     public void run(){
         try {
             final MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
             final MqttConnectOptions connOpts = new MqttConnectOptions();
             connOpts.setCleanSession(true);
             System.out.println("Connecting to broker: " + broker);
             connOpts.setKeepAliveInterval(5);
             sampleClient.setCallback(new MqttCallback() {
                 @Override
                 public void connectionLost(Throwable throwable) {
                     System.out.println("connectionLost");
                     try {
                         sampleClient.connect(connOpts);
                         sampleClient.subscribe(topic);
                     }catch (MqttException e){
                         e.printStackTrace();
                     }
                 }

                 @Override
                 public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
                     System.out.println("messageArrived:"+mqttMessage.toString());
                     System.out.println(topic);
                     System.out.println(mqttMessage.toString());
                     try {
                         JSONTokener jsonParser = new JSONTokener(mqttMessage.toString());
                         JSONObject person = (JSONObject) jsonParser.nextValue();
                         temperature = person.getDouble("temperature");
                         humidity = person.getDouble("humidity");
                         light = person.getDouble("light");
                         pressure = person.getDouble("pressure");
                         System.out.println("temperature = " + temperature);
                         System.out.println("humidity = " + humidity);
                         runOnUiThread(new Runnable() {
                             @Override
                             public void run() {
                                 temperatureTextView.setText(String.format("%.1f", temperature));
                                 humidityTextView.setText(String.format("%.1f", humidity));
                                 lightTextView.setText(String.format("%.1f", light));
                                 pressureTextView.setText(String.format("%.1f", pressure));
                             }
                         });
                     } catch (JSONException ex) {
                         ex.printStackTrace();
                     }
                 }

                 @Override
                 public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                     System.out.println("deliveryComplete");
                 }
             });
             sampleClient.connect(connOpts);
             sampleClient.subscribe(topic);
         } catch(MqttException me) {
             System.out.println("reason "+me.getReasonCode());
             System.out.println("msg "+me.getMessage());
             System.out.println("loc "+me.getLocalizedMessage());
             System.out.println("cause "+me.getCause());
             System.out.println("excep "+me);
             me.printStackTrace();
         }
     }
}


3 实测效果
1,单片机端定时更新传感器数据,手机端也会同步更新;
2,手机端点击4个LED控制的按钮,板子上也会点亮或者熄灭对应的LED;

4 源码下载
http://www.embed-net.com/thread-230-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-8-10 14:13:05 | 显示全部楼层
学习,帮顶

出0入0汤圆

发表于 2015-8-10 14:15:56 | 显示全部楼层
高大上啊,做的不错!                                                                        

出0入0汤圆

发表于 2015-8-10 14:24:12 | 显示全部楼层
高大上

出0入0汤圆

发表于 2015-8-10 14:25:45 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2015-8-10 14:26:04 | 显示全部楼层
这个得要顶

出0入0汤圆

发表于 2015-8-10 14:29:24 | 显示全部楼层
学习一下,帮顶。
好。

出0入0汤圆

发表于 2015-8-10 14:32:16 | 显示全部楼层
顶  正想学习mqtt   

出0入0汤圆

发表于 2015-8-10 14:36:37 | 显示全部楼层
学习 感谢楼主

出0入0汤圆

发表于 2015-8-10 15:55:57 | 显示全部楼层
好资料,学习学习...

出0入0汤圆

发表于 2015-8-10 16:10:36 | 显示全部楼层
本帖最后由 embeddev_1 于 2015-8-10 16:11 编辑

这个手机软件提供源码麽? 另外只需要stm32+手机,不需要别的代理麽?

出20入25汤圆

发表于 2015-8-10 16:15:41 | 显示全部楼层
embeddev_1 发表于 2015-8-10 16:10
这个手机软件提供源码麽? 另外只需要stm32+手机,不需要别的代理麽? ...

看上去用了服务器,楼主讲解下你的服务器怎么配置的。

出0入0汤圆

发表于 2015-8-10 16:21:46 | 显示全部楼层
本帖最后由 _yuming 于 2015-8-10 16:22 编辑

我把STM32端的搬过来,剩下的哪位大侠搬到这边来。那边需要金币才能下载。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入4汤圆

发表于 2015-8-10 16:57:18 | 显示全部楼层
MQTT 好东西,好好看看

出0入4汤圆

发表于 2015-8-10 16:58:56 | 显示全部楼层
请教一下,MQTT服务器用的是什么?

出0入16汤圆

发表于 2015-8-10 17:24:48 | 显示全部楼层
正在研究这块,谢谢楼主的资料!

出0入0汤圆

 楼主| 发表于 2015-8-10 17:40:05 | 显示全部楼层
embeddev_1 发表于 2015-8-10 16:10
这个手机软件提供源码麽? 另外只需要stm32+手机,不需要别的代理麽? ...

所有源码都提供的,需要服务器,服务器端安装下mosquitto就可以了,步骤非常简单,详细教程可以参考下面这个链接:
http://www.embed-net.com/thread-224-1-1.html

出0入0汤圆

发表于 2015-8-10 18:03:57 | 显示全部楼层
顶楼主啊!不顶不行!

出0入0汤圆

发表于 2015-8-10 18:10:20 | 显示全部楼层
顶,相当不错

出0入10汤圆

发表于 2015-8-10 18:51:18 | 显示全部楼层
这个不顶不行。

出0入0汤圆

发表于 2015-8-10 19:12:41 | 显示全部楼层
谢谢楼主详细的教程!

出0入0汤圆

发表于 2015-8-10 19:49:53 | 显示全部楼层
MQTT服务器(服务器域名和IP见固件程序)  这个也是在单片机端实现的吗?没看到介绍服务器的??

出0入8汤圆

发表于 2015-8-10 22:13:08 来自手机 | 显示全部楼层
手机客户端好写么?想研究研究

出0入0汤圆

 楼主| 发表于 2015-8-10 22:31:39 | 显示全部楼层
justdomyself 发表于 2015-8-10 22:13
手机客户端好写么?想研究研究

不难,我也是边写程序边学习

出0入0汤圆

 楼主| 发表于 2015-8-10 22:33:43 | 显示全部楼层
soos 发表于 2015-8-10 19:49
MQTT服务器(服务器域名和IP见固件程序)  这个也是在单片机端实现的吗?没看到介绍服务器的?? ...

服务器端实在太简单了,我都懒得介绍了
http://www.embed-net.com/thread-224-1-1.html
这里有介绍

出0入0汤圆

发表于 2015-8-10 23:07:43 来自手机 | 显示全部楼层
这个不顶不行。

出0入0汤圆

发表于 2015-8-11 09:33:39 | 显示全部楼层
看来大家不是很热情呀,手机端的源码已经下载了就不上传了。。

出0入0汤圆

发表于 2015-8-11 09:43:43 | 显示全部楼层
_yuming 发表于 2015-8-11 09:33
看来大家不是很热情呀,手机端的源码已经下载了就不上传了。。

我也在用5500,这个一定要支持.

求手机源码^^

出0入0汤圆

发表于 2015-8-11 09:47:23 | 显示全部楼层
_yuming 发表于 2015-8-11 09:33
看来大家不是很热情呀,手机端的源码已经下载了就不上传了。。

上传下吧!吊大家胃口!  那边注册麻烦还要赚金币

出0入0汤圆

发表于 2015-8-11 09:58:56 | 显示全部楼层
embeddev_1 发表于 2015-8-11 09:47
上传下吧!吊大家胃口!  那边注册麻烦还要赚金币

本来我是想靠大家的力量,把那边的资料移到这边来,我上传了一个STM32端的,手机端等着其他人来上传。。可是。。。。。哎!!!!!!!!

出0入0汤圆

发表于 2015-8-11 11:02:32 | 显示全部楼层
wdluo 发表于 2015-8-10 22:33
服务器端实在太简单了,我都懒得介绍了
http://www.embed-net.com/thread-224-1-1.html
这里有介绍 ...

服务器端  例子介绍中是在linux中的。有没有WINDOW的服务器软件啊?

出0入0汤圆

 楼主| 发表于 2015-8-11 12:14:11 | 显示全部楼层
soosqt 发表于 2015-8-11 11:02
服务器端  例子介绍中是在linux中的。有没有WINDOW的服务器软件啊?

我没去做windows端的,不过想来也是差不多的

出0入0汤圆

发表于 2015-8-14 20:15:22 来自手机 | 显示全部楼层
学习了!

出0入0汤圆

发表于 2015-8-14 20:23:32 | 显示全部楼层
好贴,顶一个!

出0入0汤圆

发表于 2015-8-14 20:28:50 | 显示全部楼层
赞! 最近也在用mqtt, 简单好用, 不调试的时候我们几个就用mqtt来聊天了

出0入0汤圆

发表于 2015-8-15 17:42:22 | 显示全部楼层
灰常不错,正想往这方面研究。

出0入0汤圆

发表于 2015-8-15 20:58:20 | 显示全部楼层
高大上,很有参考价值。

出0入0汤圆

发表于 2015-8-28 20:51:28 | 显示全部楼层
_yuming 发表于 2015-8-10 16:21
我把STM32端的搬过来,剩下的哪位大侠搬到这边来。那边需要金币才能下载。。。 ...

真是雷锋啊。资料不错,感谢你把资料搬过来!

出0入0汤圆

发表于 2015-8-28 21:39:55 | 显示全部楼层
必须顶,谢谢分享

出0入0汤圆

 楼主| 发表于 2015-8-28 23:45:54 | 显示全部楼层
http://www.embed-net.com/thread-253-1-1.html
这个是基于W7500芯片实现的

出0入0汤圆

发表于 2015-8-29 09:01:13 | 显示全部楼层
不错,必须顶顶!

出0入8汤圆

发表于 2015-8-29 09:04:23 | 显示全部楼层
wdluo 发表于 2015-8-28 23:45
http://www.embed-net.com/thread-253-1-1.html
这个是基于W7500芯片实现的

这个是什么论坛  根本就打不开???!!!!

出0入0汤圆

 楼主| 发表于 2015-8-29 22:06:52 | 显示全部楼层
justdomyself 发表于 2015-8-29 09:04
这个是什么论坛  根本就打不开???!!!!

你是移动宽带?

出0入0汤圆

发表于 2015-8-30 00:08:21 | 显示全部楼层
学习,顶楼主……

出0入8汤圆

发表于 2015-8-30 20:16:12 | 显示全部楼层
wdluo 发表于 2015-8-29 22:06
你是移动宽带?

恩 铁通

出0入4汤圆

发表于 2015-9-3 17:17:31 | 显示全部楼层
我的也是移动光纤,打不开embed

出5入42汤圆

发表于 2015-9-3 19:58:22 来自手机 | 显示全部楼层
谢谢楼主分享。这个可以直接用在项目中。

出0入0汤圆

发表于 2015-10-21 09:14:34 | 显示全部楼层
不是开源吗?金币还要RMB购买,,,,,,,资料移到这里吧。。期待楼主开源

出0入0汤圆

发表于 2015-10-21 13:29:41 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2015-10-21 13:57:45 | 显示全部楼层
想学习一下,mqtt是啥玩意

出0入0汤圆

发表于 2015-11-9 13:15:14 | 显示全部楼层
very good。准备研究这玩意。

出0入0汤圆

发表于 2015-11-14 14:34:46 | 显示全部楼层
很不错,学习了

出0入0汤圆

发表于 2015-11-14 14:46:33 | 显示全部楼层
mark,好厉害

出0入0汤圆

发表于 2015-11-14 17:58:45 | 显示全部楼层
不爽不爽,外部论坛下载连接要金币!

出0入0汤圆

发表于 2015-11-15 00:26:33 | 显示全部楼层
把安卓的源码奉送上来,只不过因为版本问题我编译不过,有谁熟悉安卓开发的,改下工程呗,让SDK只支持4.0以上的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2015-11-15 01:17:53 | 显示全部楼层
这个吊,留名!研究一下

出0入0汤圆

发表于 2015-11-15 01:37:15 | 显示全部楼层
学习了。mark

出0入0汤圆

发表于 2015-11-15 12:01:47 来自手机 | 显示全部楼层
这个必须顶,很有前景的应用

出0入0汤圆

发表于 2016-1-12 18:03:03 | 显示全部楼层
这个顶一下,目前刚好有个这方面的东西,要学习。。

出0入0汤圆

发表于 2016-1-12 18:06:36 | 显示全部楼层
_yuming 发表于 2015-8-10 16:21
我把STM32端的搬过来,剩下的哪位大侠搬到这边来。那边需要金币才能下载。。。 ...

谢谢了,刚发现需要金币

出0入0汤圆

发表于 2016-1-14 16:11:28 | 显示全部楼层
谢谢!研究研究正好能用上

出100入101汤圆

发表于 2016-1-15 11:42:57 | 显示全部楼层
大牛,软硬件都精通!

出0入0汤圆

 楼主| 发表于 2016-1-15 12:18:45 | 显示全部楼层
fengyunyu 发表于 2016-1-15 11:42
大牛,软硬件都精通!

精通不敢当,都只是略懂一些...

出0入0汤圆

发表于 2016-1-15 22:31:22 | 显示全部楼层
我也买了一套STM32+W550,学习中

出0入0汤圆

发表于 2016-1-15 23:10:49 | 显示全部楼层
订阅传感器数据是什么意思?是不是就是到服务器获取数据?如果就是到服务器获取数据,为什么要特意改变叫做订阅?

出0入0汤圆

发表于 2016-1-16 09:11:37 | 显示全部楼层
正好在研究这款块 不过楼主的这个底层支持wifi么 ,感觉wifi应用更广泛一些

出0入0汤圆

发表于 2016-1-16 22:49:42 | 显示全部楼层
好东西,顶!

出0入0汤圆

发表于 2016-1-17 21:47:33 | 显示全部楼层
再顶一个

出0入0汤圆

发表于 2016-4-7 08:12:18 | 显示全部楼层
_yuming 发表于 2015-8-10 16:21
我把STM32端的搬过来,剩下的哪位大侠搬到这边来。那边需要金币才能下载。。。 ...

多谢,下载一个看看,学习下,很高大上的感觉。

出0入0汤圆

发表于 2016-4-7 08:38:37 | 显示全部楼层
感觉是转帖的,还需要金币?

出0入0汤圆

发表于 2016-4-7 09:56:07 | 显示全部楼层
高大上的东西,学习学习

出0入0汤圆

发表于 2016-4-9 10:18:40 | 显示全部楼层
MTQQ是什么,不了解

出0入0汤圆

发表于 2016-4-9 10:22:25 | 显示全部楼层
刚刚有个类似的项目想用

出0入0汤圆

发表于 2016-4-10 16:36:39 | 显示全部楼层
非常不错的资料

出0入0汤圆

发表于 2016-4-13 12:58:47 | 显示全部楼层
STM32+W5500+MQTT+Android实现远程数据采集及控制

出0入0汤圆

发表于 2016-4-15 17:14:39 | 显示全部楼层
手机mx3吧  和我一样

出0入0汤圆

发表于 2016-6-5 21:49:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2016-6-5 23:32:03 | 显示全部楼层
STM32+W5500+MQTT+Android

出0入45汤圆

发表于 2016-6-6 08:29:06 | 显示全部楼层
mark一下.

出0入0汤圆

发表于 2016-6-6 20:37:13 来自手机 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2016-6-6 23:30:16 | 显示全部楼层
这个可以,高大上的资料,收藏了先

出0入0汤圆

发表于 2016-6-7 06:43:35 | 显示全部楼层
非常感谢,学习中

出0入0汤圆

发表于 2016-6-8 22:57:01 | 显示全部楼层
这个必须mark一下,有机会仔细看看

出0入0汤圆

发表于 2016-6-9 07:25:22 | 显示全部楼层
顶 不要问为什么 就是想顶一下

出0入0汤圆

发表于 2016-6-28 16:44:18 | 显示全部楼层
整套实现,很不错,赞一个~

出0入0汤圆

发表于 2016-9-12 12:37:11 | 显示全部楼层
_yuming 发表于 2015-8-10 16:21
我把STM32端的搬过来,剩下的哪位大侠搬到这边来。那边需要金币才能下载。。。 ...

太谢谢了,还有其他的哪里可以下载到

出0入0汤圆

发表于 2016-9-12 12:39:29 | 显示全部楼层
lghtjpu 发表于 2015-11-15 00:26
把安卓的源码奉送上来,只不过因为版本问题我编译不过,有谁熟悉安卓开发的,改下工程呗,让SDK只支持4.0以 ...

非常感谢

出0入0汤圆

发表于 2016-9-12 13:28:26 | 显示全部楼层
STM32+W5500+MQTT+Android实现远程数据采集及控制  mark

出0入0汤圆

发表于 2016-9-15 00:13:48 | 显示全部楼层
STM32+W5500+MQTT+Android实现远程数据采集及控制 mark

出0入0汤圆

发表于 2016-9-29 11:22:11 | 显示全部楼层
wdluo 发表于 2015-8-10 22:33
服务器端实在太简单了,我都懒得介绍了
http://www.embed-net.com/thread-224-1-1.html
这里有介绍 ...

有windows服务器的吗?

出0入0汤圆

发表于 2017-1-23 15:12:16 | 显示全部楼层
服务器端用的mosquitto库.
STM32和手机端都是客户端, 用的paho库

出0入0汤圆

发表于 2017-2-5 02:45:54 | 显示全部楼层
MARK,STM32+W5500+APP很好的资料

出0入0汤圆

发表于 2017-2-5 11:57:55 | 显示全部楼层
学习学习~~

出0入0汤圆

发表于 2017-2-22 15:26:23 | 显示全部楼层
赞                 

出0入0汤圆

发表于 2017-2-22 19:29:12 | 显示全部楼层
学习啦Mqtt

出0入0汤圆

发表于 2017-5-24 12:59:29 | 显示全部楼层
学习下mqtt,谢谢楼上各位,特别是楼主的奉献

出0入0汤圆

发表于 2017-12-8 17:12:02 | 显示全部楼层
原出处还是在咱论坛上,好几个网站都转载楼主这篇文章了

出0入0汤圆

发表于 2017-12-14 15:26:40 | 显示全部楼层
谢谢分享~

出0入0汤圆

发表于 2017-12-14 16:14:45 | 显示全部楼层
你這接個Homebridge+HomeAssistant就能在ios的Homekit顯示了

出0入0汤圆

发表于 2017-12-17 23:09:14 | 显示全部楼层
厉害了~~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 22:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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