2016-04-04 10 views
0

enter image description here Dizüstü bilgisayarımdaki Mosquitto aracısını yüklemek ve çalıştırmak için aşağıdaki bağlantıda belirtilen adımları uyguladım. https://sivatechworld.wordpress.com/2015/06/11/step-by-step-installing-and-configuring-mosquitto-with-windows-7/ Yayınlama ve abonelik olaylarını komut satırı i.e, mosquitto_pub ve mosquitto_sub komutlarını kullanarak test ettim ve iyi çalıştılar!
"PubSubClient" kitaplığından işlevler kullanan bir Arduino kullanarak dizüstü bilgisayarımda çalışan bu aracıya (1883 numaralı bağlantıyı dinleme - netstat-an komutunu kullanarak onaylama) yayımlamak istiyorum.
Arduino Publish taslağında sunucunun IP adresi için, dizüstü bilgisayarımın IP adresini, ev ağımla bağlantı kurduğunda aldığım kendime verdim. yayıncı kodu aşağıdadır:Dizüstü bilgisayarda çalışan Mosquitto komisyoncusu üzerinde yayınla

#include <SPI.h> 
#include <Ethernet.h> 
#include <PubSubClient.h> 


#define CLIENTID "Arsen" 
const char topic[] = "tem"; 
#define POLLINTERVAL 120000 

void callback(char* topic, byte* payload, unsigned int length){ 
//Do nothing as we are publishing ONLY. 
} 

byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED} ; 
IPAddress server(192, 168, 0, 10); 
EthernetClient ethClient; 
PubSubClient arduinoClient(server,1883, callback, ethClient) ; 
unsigned long boardTime = 0 ; 
float sensedTemperature = 0; 
char charTemp [6]; 
int connRC = 0; 


void setup(void) { 
Serial.begin(9600); 
//Connect to the MQTT server - test.mosquitto.org 
beginConnection() ; 
} 

//Initialise MQTT connection 
void beginConnection() { 
Serial.begin(9600); 
Ethernet.begin(mac) ; //using the address assigned through DHCP 
do{ 
int connRC = arduinoClient.connect(CLIENTID); 
}while(connRC==1); 
Serial.println("We are connected finally"); 
delay(5000); 
Serial.println(arduinoClient.state()); 
} 



void loop(void) { 
boardTime = millis(); 
if ((boardTime % POLLINTERVAL) == 0) { 
    getTemp(); 
    dtostrf(sensedTemperature,5,2,charTemp); 
    boolean rec = arduinoClient.publish(topic, charTemp); 
    Serial.println(rec); 
    Serial.println("Successfully published"); 
} 
arduinoClient.loop(); 
} 

void getTemp() { 
// Send the command to get temperatures 
delay(100); 
sensedTemperature = analogRead(2); //temperature sensor at analog pin 2 on Arduino. 
Serial.println(sensedTemperature); 
delay(150); 
} 

abone kodudur: başarıyla örnek programları infaz olarak

#include <Ethernet.h> 
#include <EthernetUdp.h> 
#include <EthernetServer.h> 
#include <EthernetClient.h> 
#include <Dns.h> 
#include <Dhcp.h> 
#include <SPI.h> 
#include <PubSubClient.h> 

#define PIN 13 

//MQTT Definition 

#define CLIENTID "Aract" 
#define TOPICNAME "tem" 
byte mac [] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED} ; 
IPAddress server(192,168,0,5);  // Mosquitto Server 
int connRC = 0; 

//Handle message from mosquitto and set LEDs 
void callback(char* topic, byte* payload, unsigned int length) { 
int i=0; char buffer [length]; 
for(i=0;i<length;i++) { 
    buffer [i] = char((payload[i])); 
} 
String payLoadData = buffer; 
Serial.println(payLoadData); 
setled(payLoadData); 
} 

//Our MQTT client 
EthernetClient ethclient; 
PubSubClient arduinoClient(server, 1883, callback, ethclient) ; 
void setup() { 
//Connect to the MQTT server - test.mosquitto.org 
beginConnection() ; 
} 

//Initialise MQTT connection 
void beginConnection() { 
Serial.begin(9600); 
Ethernet.begin(mac) ; 
do{ 
connRC = arduinoClient.connect(CLIENTID) ; 
delay(2000); 
}while(connRC==1); 
delay(3000); 
Serial.println(arduinoClient.state()); 
if (connRC==1) { 
boolean rec = arduinoClient.subscribe(TOPICNAME) ; 
Serial.println(rec); 
Serial.println("Successfully Subscribed"); 
} else { 
Serial.println("connRC") ; 
} 
} 

void loop() 
{ 
    arduinoClient.loop() ; 

} 

void setled(String s) 
{ 
    int temperature; 
    temperature = s.toInt(); 
    Serial.println(temperature); 
    if (temperature >= 200){ 
    digitalWrite(PIN, HIGH); 
    } 
    else{ 
    digitalWrite(PIN, LOW); 
    } 
} 

Ethernet kalkan iyi çalışıyor. Durum işlevi, kartın ağa bağlandığını ima eden "sıfır" değerini döndürür. Ancak, yayınlama komutu false veren bir "rec" boole değeri döndürür. Bu sürecin neden her zaman başarısız olduğunu bilmek istiyorum?
Mosquitto on komut satırındaki ayrıntılı seçenek (-v), günlüğe kaydedilen ayrıntıları göstermek yerine bilinmeyen bir hata oluşturur. Bu problemin üstesinden gelmek veya tekniğimde tam olarak neyin yanlış olduğu nasıl?

enter image description here

+0

mosquitto konsol çıktısını Add soruna doğru olarak sorunun ne olduğunu tam olarak görebilmemiz için sorunun nedenini gösterecektir – hardillb

+0

Belirtildiği gibi, pub ve alt komutlar gayet iyi çalışıyor. Ancak, ayrıntılı komut, arka planda çalışan eylemlerin jistini listelemez. Ayrıca, genellikle olması gereken IPv4 adreslerini kabul edebileceğini düşünmüyorum! –

+0

Bu Ardunio kodu ile ilgisi yok, sadece başlamak için başarısız olan mosquitto. Nasıl yüklediniz ve readme-windows.txt dosyasında belirtilen ön req'leri yüklediniz mi? – hardillb

cevap

0

Sadece açık şimdi, PC ve durdurmamosquitto-komisyoncu çalışan hizmetler gidin ... Ben aynı sorunla karşı karşıya olduğunu ve bu şekilde çözüm var cmd ve dizini mosuitto dosyalarının bulunduğu yere değiştirir (benim durumumda "cd C: \ Program Files (x86) \ mosquitto") ve sonra bu komutu girin mosquitto -v, şimdi sadece sola bu pencere gibi (eğer kapalıysa o zaman işe yaramaz) ... Gerçekten çalıştı ve onun durumunda önce çalışmayan sebebi biz sonra IPv4 için onun Açılmıyor portları moquitto-simsar servisi başladığında, ve burada referans "Mosquitto Error"

İlgili konular