wemos d1采集台达hmc资料上传到mqtt服务器

硬件连线如下图

 

台达hmc的通讯设置和界面分别如下图 

wemos端代码如下

//wemos d1通过modbus读取台达hmc数据用mqtt上传到树莓派上mqtt服务器
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include<ArduinoJson.h>
#include<ModbusMaster.h>
ModbusMaster node;
uint8_t result;

const char* ssid = "wifi名称";
const char* password = "wifi密码";

const char* mqtt_server = "192.168.10.82"; // 服务器地址
const int port = 1883;//服务器端口号

const char* topic_name = "/public/TEST/";
const char*client_id = "wemos001";
unsigned long lastSend;

uint16_t ReceivedData[14] = {0};
/*char类型的数组在字符数组中最后一位为转移字符'\0'(也被成为空字符),该字符表示字符串已结束.
char array[10] = "cnblogs";
虽然只有7个字节,但是字符串长度为8个字节。*/
char robbotID[5];
char machineID[5];
char mouldID[11];
int state;
float cycltime;
float robottime;
char publishmsg[200];

WiFiClient espclient;
PubSubClient client(espclient);
//获取Modbus数据
void GetModbusData()
{ result = node.readHoldingRegisters(2000,12);//从台达hmc上M$0开始读12个字
  if(result == node.ku8MBSuccess)
  {
    for(int i=0;i<12;i++)
      {
        ReceivedData[i] = node.getResponseBuffer(i);
        Serial.print("ReceivedData[");
        Serial.print(i);
        Serial.print("]=");
        Serial.println(ReceivedData[i],HEX);
        }
        
        for(int j=0;j<2;j++)
        { 
        robbotID[2*j] = char(lowByte(ReceivedData[j]));
        robbotID[2*j+1] = char(highByte(ReceivedData[j]));
        }
 
       for(int k=0;k<2;k++)
      {
        machineID[2*k] = char(lowByte(ReceivedData[k+2]));
        machineID[2*k+1] = char(highByte(ReceivedData[k+2]));
        }
      for(int l=0;l<5;l++)
      {
        mouldID[2*l] = char(lowByte(ReceivedData[l+4]));
        mouldID[2*l+1] = char(highByte(ReceivedData[l+4]));
        }
    
      state = ReceivedData[9];
      cycltime = float(ReceivedData[10])/10;
      robottime =float(ReceivedData[11])/10;
        
    
  StaticJsonBuffer<200> jsonBuffer;
  JsonObject& root = jsonBuffer.createObject();//创建顶节点
  root["d0"] = robbotID;
  root["d1"] = machineID;
  root["d2"] = mouldID;
  root["d3"] = state;
  root["d4"] = cycltime;
  root["d5"] = robottime;
  root.printTo(Serial);
  Serial.println();
  root.printTo(publishmsg);
  client.publish(topic_name,publishmsg);
   } 
  }
//初始化wifi
void setup_wifi(){
  delay(10);
  WiFi.begin(ssid,password);
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print("...");
  }
}
//连接服务器
void reconnect(){
  while(!client.connected()){//如果没有连上
    if (client.connect(client_id)){//接入时本设备id

      Serial.println("connect success");
    }else{
      Serial.print("failed,rc=");
      Serial.print(client.state());
      Serial.print("try 5 seconds later");
      delay(5000);
      
      }
  }
}
void setup(){
  Serial.begin(9600);
  setup_wifi();
  node.begin(1,Serial);
  client.setServer(mqtt_server,port);



  lastSend = 0;
}
void loop(){
 reconnect();
 if (millis() - lastSend > 10000){
    GetModbusData();
    lastSend = millis();
 }



  client.loop();

}

用python写了一个简单的mqtt客户端做测试,代码如下

# -*- coding: utf-8 -*-
"""
Created on Sat Jan 26 16:15:27 2019

@author: 46980
"""

import paho.mqtt.client as mqtt
HOST = "192.168.10.82"
PORT = 1883




# 连接MQTT服务器
def on_connect(client,userdata,flags,rc):
    print("connect with result code"+str(rc))
    client.subscribe("/public/TEST/")

    


# 消息处理函数
def on_message(client, userdata, msg):
    print("hello")
    print(msg.topic+" "+str(msg.payload))


client = mqtt.Client("test001")
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.10.82",1883,60,)
client.loop_forever()

 测试成功后会有如下显示

 

pahomqtt库说明 说明: “connect with code  0: Connection successful 1: Connection refused - incorrect protocol version 2: Connection refused - invalid client identifier 3: Connection refused - server unavailable 4: Connection refused - bad username or password 5: Connection refused - not authorised 6-255: Currently unused.“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值