当前位置: 首页 > 网络应用技术

如何关注Django(MQTT和MQ)

时间:2023-03-06 18:09:47 网络应用技术

  简介:今天,首席执行官指出,与您分享如何与Django相关。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  instasted_apps =((

  #“ jet.dashboard”,

  #“喷气机”,

  'django.contrib.admin',

  'django.contrib.auth',

  'django.contrib.contenttypes',

  'django.contrib.sessions',

  'django.contrib.messages',

  'django.contrib.staticfiles',

  #Django Rest框架

  'REST_FRAMEWORK',

  'Rest_framework.authtoken',

  #我的应用程序

  'mqtt_bridge'

  治愈

  通信猫调试软件在下面使用。

  通信猫调试软件在这里使用串行端口进行示例。首先打开软件,然后您可以在软件中间看到com1或com5(在这里您可以在计算机中正确单击属性,在计算机中查找串行端口设备管理器),然后将其打开。如果您成功打开它,则可以在左侧的串行端口上看到接收数据。

  软件配置文件,通讯猫调试软件v313,收集串行端口,并行,USB,TCP,UDP,MQTT,MQTT,蓝牙,WiFi,摄像头测试功能以及一个车身中的许多实用小工具。通用猫调试软件是MQTT测试软件,是MQTT测试软件可以执行MQTT,TCPIP和串行测试。这些功能非常丰富,支持串行端口,并行,TCP服务器,TCP客户端,UDP,HTTP调试。功能是实用的,您可以下载它进行试用。

  [1]可以在MQTT协议中指定用户名和密码。在Yeelink协议中,用户名变为u-apikey,密码是U-Apikey的特定值。

  [2]订阅设备URI的主题,您需要将API版本编号修改为v1.1

  [3]主机名是mqtt.yeelink.net而不是api.yeelink.net

  在mqtt.js的示例代码中:client = mqtt.connect('mqtt:// user:pass@localhost');

  在Yeelink的示例代码中:client = mqtt.connect(“ mqtt://u-apikey:your_key@mqtt.yeelink.net”);

  以上两个示例代码可以解释每个参数的相应关系。

  建立物联网所需的技术

  一:单芯片微型计算机/嵌入式开发

  聪明的硬件,嘿,不是一个芯片微型计算机吗?最终分析,它是一个微控制器。现在出现智能手表,照明LED灯,蓝牙解锁,WiFi插座等。专业人士通常教授51或AVR或计算机系统。流行的Arduino也是一种单芯片微型计算机的开发。

  但是要制作智能硬件,不可能在技术中进行单个芯片编程。电子系统设计必须是!

  两个:网络通信协议

  智能硬件和传统电子产品之间的最大区别是,智能硬件已连接到网络。要连接到网络,我们需要使用网络通信模块和学习网络通信协议-TCP/IP。

  TCP/IP是技术的一般说法。它包含两个协议TCP和UDP,该协议位于网络通信分层模型的传输层中,也由操作系统管理。这些技术(例如HTTP,DNS)属于应用程序层,位于TCP上/udp.simarly,最近更受欢迎的MQTT协议,来自具有有限计算能力的通信设备的MQTT协议也属于TCP。

  为了允许电子产品具有连接的能力,只要电路设计将通信模块连接到主控制芯片,并为接收和接收网络说明编写代码,其余就是电子产品的设计。

  3:服务器开发框架

  客户端/服务器架构,客户端/服务器架构。智能硬件连接到背景服务器后,它是客户端和终端。由于单芯片机中的资源有限,实际上不太可能使用http协议,因此Internet中常见的Web服务器开发不适合这里。一些制造商将自定义TCP上的协议,并进行一些移植协议,例如MQTT,COAP等。

  服务方面的开发更为复杂。芯片微型计算机/嵌入式软件开发是可以的。只要您学习C语言,就可以扮演世界无敌的手,并开发服务方面。使用Java或PHP?无论如何,Java和Python选择一个。通常学习Python。

  Python服务器上有许多类型的开发框架。Web开发的Django,BlaskTornado Web服务器和TCP服务器可以使用扭曲,依此类推。MQTT具有已完成的服务器。这样的服务器本身不需要开发它。

  1.下载Apollo服务器,下载后下载,然后运行Apache-Apollo-1.6binapollo.cmd,输入创建MyBroker,运行数据等,然后与服务器流程相关联。

  2.创建MyBroker将在BIN目录中生成MyBroker文件夹,其中包含大量信息。其中,etcapollo.xml文件是配置服务器信息的文件。等等。Properties文件包含通过将MQTT服务器连接到MQTT服务器的用户名和密码。我将稍后介绍原始Admin =密码,然后您可以更改以添加新的用户名密码。

  3.打开CMD并运行... apache-apollo-1.6binmyBrokerbinapollo- Broker.cmd Run打开服务器。您可以输入浏览器以查看安装是否成功。该界面显示了许多信息,例如主题和连接数量。

  在上述简单步骤之后,服务器基本完成。下一篇文章将介绍Android客户端的写作和预防措施。

  客户端使用的API,我开始使用MQTT-CLIENT。使用后,我发现存在数百个问题,无法很好地满足要求。后来,我使用了正式推荐的Eclipse Paho。客户代码在下面编写。两个项目:Android和J2SE:

  1.新的Android工程MQTTCLCLIENT

  2.主攻击代码如下:

  [java]查看plaincopyprint?

  软件包ldw.mqttclient;

  导入java.util.concurrent.executors;

  导入java.util.concurrent.scheduledexecutorservice;

  导入java.util.concurrent.timeunit;

  导入org.eclipse.paho.client.mqttv3.imqttlinerytoken;

  导入org.eclipse.paho.client.mqttv3.mqttcallback;

  导入org.eclipse.paho.client.mqttv3.mqttclient;

  导入org.eclipse.paho.client.mqttv3.mqttconnectoptions;

  导入org.eclipse.paho.client.mqttv3.mqttexception;

  导入org.eclipse.paho.client.mqttv3.mqttmessage;

  导入org.eclipse.paho.client.mqttv3.pers.memorypersistence;

  导入Android.App.Activity;

  导入android.os.bundle;

  导入android.os.handler;

  导入android.os.message;

  导入android.view.keyevent;

  导入android.widget.textview;

  导入android.widget.toast;

  公共班级主进扩展活动{

  私有TextView resulttv;

  私有字符串host =“ tcp://127.0.0.0.0.1:1883”;

  私有字符串用户名=“ admin”;

  私有字符串密码=“密码”;

  私人处理程序;

  私有mqttclient客户端;

  私有字符串mytopic =“ test/topic”;

  私有MQTTConnectOptions选项;

  私有计划ExecutorService调度程序;

  @Override

  受保护的void ongreate(捆绑savedinstancestate){

  super.oncreate(SavedinStancestate);

  setContentView(r.layout.main);

  resulttv =(textView)findViewById(r.id.result);

  在里面 ();

  处理程序= new Handler(){

  @Override

  public void handlemessage(消息msg){

  super.handlemessage(msg);

  if(msg.what == 1){{{

  toast.maketext(mainActivity.this,(string)msg.obj,

  toast.length_short).show();

  system.out.println(“ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------”)

  } else if(msg.what == 2){

  toast.maketext(mainActivity.this,“连接成功”,toast.length_short).show();

  尝试 {

  client.subscribe(mytopic,1);

  } catch(异常E){

  e.printstacktrace();

  }

  } else if(msg.what == 3){

  toast.maketext(mainActivity.this,“连接故障,系统已连接”,toast.length_short).show();

  }

  }

  };

  startOldNect();

  }

  私有void startreconnect(){

  scheduler = executors.newsingleadschedexecutor();

  Scheduler.scheduletFixedRate(new Runnable(){

  @Override

  public void run(){

  if(!client.isconnect()){{){

  连接 ();

  }

  }

  },0 * 1000,10 * 1000,timeunit.milliseconds);

  }

  私人void init(){

  尝试 {

  //主机是主机名,测试是客户端,即连接到MQTT的客户端ID。通常,它由客户端唯一标识符表示。

  客户端= new MQTCLIENT(主机,“测试”,

  新的内存普及());

  // MQTT连接设置

  options = new mqttconnectoptions();

  //设置是否清空会话。如果将其设置为false,则意味着服务器将保留客户端的连接记录。该集合在此处设置,以指示与服务器的每个连接都以新的身份连接到服务器。

  options.setCleanssessess(true);

  //设置连接的用户名

  options.setusername(用户名);

  //设置连接的密码

  options.setPassword(password.tochararray());

  //以秒为单位设置超时单元

  options.setConnectionTimeOut(10);

  //设置第二个服务器的会话 - 跳跃时间单元将向客户端发送消息,以确定客户端是否每1.5*20秒在线,但是此方法没有反复链接的机制。

  options.setKeepaliveInterval(20);

  //设置回调

  client.setCallback(new mqttcallback(){

  @Override

  public void ConnectionLost(可抛出原因){{{

  //连接丢失后,通常在此处重新连接

  

  }

  @Override

  public void deliverycomplete(imqttdeliverytoken token){{{

  //发布后将在此处执行发布

  system.out.println(“交付compleplete ---------------------------”

  + token.iscomplete());

  }

  @Override

  公共void messagearrived(字符串主题名,mqttmessage消息)

  抛出异常{

  //在此处将执行订阅者后获得的消息

  system.out.println(“ Messagearrived ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------”)

  消息msg = new Message();

  msg.what = 1;

  msg.obj = topicname+“ ---”+message.toString();

  Handler.SendMessage(MSG);

  }

  });

  // 连接 ();

  } catch(异常E){

  e.printstacktrace();

  }

  }

  私有void connect(){

  新线程(new runnable(){

  @Override

  public void run(){

  尝试 {

  client.connect(options);

  消息msg = new Message();

  msg.what = 2;

  Handler.SendMessage(MSG);

  } catch(异常E){

  e.printstacktrace();

  消息msg = new Message();

  msg.what = 3;

  Handler.SendMessage(MSG);

  }

  }

  })。开始 ();

  }

  @Override

  public boolean onkeydown(int key代码,keyevent事件){

  if(client!= null keycode == keyevent.keycode_back){

  尝试 {

  client.disconnect();

  } catch(异常E){

  e.printstacktrace();

  }

  }

  返回super.onkeydown(键代码,event);

  }

  @Override

  受保护的void onDestroy(){

  super.ondestroy();

  尝试 {

  Scheduler.shutdown();

  client.disconnect();

  } catch(mqttexception e){{

  e.printstacktrace();

  }

  }

  }

  由于项目的需求,我再次使用了心跳。根据这里的说明,Apollo.xml主要设置为主机连接的地址。此外,选项还具有SETWILL方法。如果项目需要知道客户端是否被删除,则可以调用此方法。

  结论:以上是每个人都为MQTT和Django汇总的首席CTO注释。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?