stm32 app 连上阿里云

stm32 app 连上阿里云

阿里云篇

1.首先得先注册账号,注册账号后选择物联网平台
2.点击公共实例
在这里插入图片描述
3.创建产品产品(我以智能窗户为例)
在这里插入图片描述
4添加设备
我们需要添三个设备 app pc stm32(由于我以前产品有 为避免重复 我改成software stm32 computer) 我以stm32为例
在这里插入图片描述
5.回到产品定义既可以发布又能订阅的topic,这个topic如同单向路一样,可以允许不同的车通过,但是反向却不能反向。我们要用app给32收发消息,所以我们要建立两个topic(data1 和 data2 同样以一个为例)。
首先回到产品选择对应产品,点击Topic类列表。点击自定义Topic 点击定义Topic
6.创建云产品流转规则并设定规则(数据由谁给谁)显然我们也要建两个,同样一个为例
创建云产品流转

在这里插入图片描述

在这里插入图片描述
7.启动云产品流转规则
在这里插入图片描述
我们使用mqtt测试一下能不能连上。我们得用技小新 MQTT编程工具,自动生成连接Aliyun信息

链接:[https://pan.baidu.com/s/14C55cnRO3C0G5gnN95JKWw] 提取码:o24i (链接来自 蓝色のLED)
首先去复制三元组,在设备页面选择一个设备

在这里插入图片描述
点进去 一键复制
打开技小新 (千万注意不要大括号在这里插入图片描述
打开mqtt.fx将刚刚生成的粘贴过去
在这里插入图片描述
在这里插入图片描述
粘贴好了点ok或者apply
再点击 Conect
在这里插入图片描述
再打开阿里云的设备会看到我的software在线
在这里插入图片描述

APP篇

1.新建工程

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
工程建立完 我们只需要看三个文件
在这里插入图片描述
2.网络权限
在这里插入图片描述
3.界面设置
在此之前先得把你手机开发者模式打开并授权传输文件 配置好后
软件会识别到你的手机
在这里插入图片描述
界面设置我建议你看正哥的(反正我看的就是他的)
(阿正啷个哩个啷)他有个专题(7天Java0基础速成安卓开发),可以看到第四天的,后面联网,正哥有服务器,(你要是有的话,就跟这那个走就完事了)

在这里插入图片描述
不同的手机型号不同,排版还得改一下。
4.app联上阿里云
新建工程就生成的
在这里插入图片描述
先把java库加入工程,直接复制文件,将其粘贴在图片目录下。然后右击文件 选择add as库就OK了。

(链接:https://pan.baidu.com/s/1uZKdYVxq7DftTXAPWMgWzA
提取码:irct )
在这里插入图片描述
mqtt协议那边(不会 做好cv工程师该做的)
只需要将第一行留下(自己新建的工程)把我的从第二行复制过去,在改成自己阿里云的四元组,就能连上自己设备(与正哥不一样的地方就是四元组 一定得仿照这个格式填入)
链接成功
在这里插入图片描述
细心的我把代码留下
package com.example.smart_window;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

//MainActivity依赖AppCompatActivity
public class MainActivity extends AppCompatActivity {

private String host = "tcp://a1IGfJFIYk1.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883";
private String mqtt_id = "software|securemode=3,signmethod=hmacsha1,timestamp=789|"; 
private String userName = "software&a1IGfJFIYk1";
private String passWord = "b400896f719f6c3794dd9ba8e798d6de72ac7ac3";

private String mqtt_sub_topic = "/a1mFXDKSRyr/my_app/user/ad"; //本次只连 未验证  收发
private String mqtt_pub_topic = "/a1mFXDKSRyr/my_app/user/data"; 

private MqttClient client;
private MqttConnectOptions options;
private Handler handler;
private ScheduledExecutorService scheduler;




@SuppressLint("HandlerLeak")
@Override
protected void onCreate(Bundle savedInstanceState) {
    //这里是界面打开后 最先运行的地方
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); //对应界面UI


    Mqtt_init();
    startReconnect();

    handler = new Handler() {
        @SuppressLint("SetTextI18n")
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1: //开机校验更新回传
                    break;
                case 2:  // 反馈回传

                    break;
                case 3:  //MQTT 收到消息回传   UTF8Buffer msg=new UTF8Buffer(object.toString());


                    break;
                case 30:  //连接失败
                    Toast.makeText(MainActivity.this,"连接失败" ,Toast.LENGTH_SHORT).show();
                    break;
                case 31:   //连接成功
                    Toast.makeText(MainActivity.this,"连接成功" ,Toast.LENGTH_SHORT).show();
                    try {
                        client.subscribe(mqtt_sub_topic,1);
                    } catch (MqttException e) {
                        e.printStackTrace();
                    }
                    break;
                default:
                    break;
            }
        }
    };
}



private void parseJSONWithJSONObject(String JsonData) { //解析json数据
    try
    {
      
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}


private void Mqtt_init()
{
    try {
        //host为主机名,test为clientid即连接MQTT的客户端ID,一般以客户端唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
        client = new MqttClient(host, mqtt_id,
                new MemoryPersistence());
        //MQTT的连接设置
        options = new MqttConnectOptions();
        //设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
        options.setCleanSession(false);
        //设置连接的用户名
        options.setUserName(userName);
        //设置连接的密码
        options.setPassword(passWord.toCharArray());
        // 设置超时时间 单位为秒
        options.setConnectionTimeout(30);
        // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
        options.setKeepAliveInterval(100);
        //设置回调
        client.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                //连接丢失后,一般在这里面进行重连
                System.out.println("connectionLost----------");
                //startReconnect();
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
                //publish后会执行到这里
                System.out.println("deliveryComplete---------"
                        + token.isComplete());
            }
            @Override
            public void messageArrived(String topicName, MqttMessage message)
                    throws Exception {
                //subscribe后得到的消息会执行到这里面
                System.out.println("messageArrived----------");
                Message msg = new Message();
                msg.what = 3;   //收到消息标志位
                msg.obj = topicName + "---" + message.toString();
                handler.sendMessage(msg);    // hander 回传
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}
private void Mqtt_connect() {
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                if(!(client.isConnected()) )  //如果还未连接
                {
                    client.connect(options);
                    Message msg = new Message();
                    msg.what = 31;
                    handler.sendMessage(msg);
                }
            } catch (Exception e) {
                e.printStackTrace();
                Message msg = new Message();
                msg.what = 30;
                handler.sendMessage(msg);
            }
        }
    }).start();
}
private void startReconnect() {
    scheduler = Executors.newSingleThreadScheduledExecutor();
    scheduler.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            if (!client.isConnected()) {
                Mqtt_connect();
            }
        }
    }, 0 * 1000, 10 * 1000, TimeUnit.MILLISECONDS);
}
private void publishmessageplus(String topic,String message2)
{
    if (client == null || !client.isConnected()) {
        return;
    }
    MqttMessage message = new MqttMessage();
    message.setPayload(message2.getBytes());
    try {
        client.publish(topic,message);
    } catch (MqttException e) {

        e.printStackTrace();
    }
}

}

stm32篇

同样直接改成自己阿里云的四元组,直接给工程
用的串口2与8266通信,使用串口打印信息,查看链接状态。
链接成功 串口显示
在这里插入图片描述
阿里云也显示上,(有时候连不上 可能是网络不好,多按复位多连几次就好了)在这里插入图片描述
工程
链接:https://pan.baidu.com/s/1qvMQ0WeR0QpD9icpxYDQkw
提取码:o724

  • 14
    点赞
  • 193
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值