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?
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
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! –
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