MQTT between Arduino and Processing: Unterschied zwischen den Versionen
		
		
		
		
		
		Zur Navigation springen
		Zur Suche springen
		
			
		
		
	
 (Die Seite wurde neu angelegt: „==Arduino Code==  <source lang="js" line start="2" highlight="4-6"> /////////////////////////////////////////////////////////////////////////////////// // Code…“)  | 
			
(kein Unterschied) 
 | 
Aktuelle Version vom 17. Mai 2022, 17:56 Uhr
Arduino Code
///////////////////////////////////////////////////////////////////////////////////
// Code for ESP32 DEV MODULE 38pin version
///////////////////////////////////////////////////////////////////////////////////
// Example for sending & receiving messages via an MQTT broker with an ESP32
// Send integers '0' or '1' to the address "/led" to turn on/off an LED on pin14.
// Every time the analog sensor value on pin36 goes bellow the "threshold" value
// a message is sent to the address "/sensor" with the current sensor value.
///////////////////////////////////////////////////////////////////////////////////
// based on Shiftr.io example code by Joël Gähwiler:
// https://shiftr.io/try
// https://www.shiftr.io/docs/manuals/arduino
// https://github.com/256dpi/arduino-mqtt
// this code is intended for use with the Shifr Desktop App!
///////////////////////////////////////////////////////////////////////////////////
// when uploading code: sometimes necessairy
// to presss&hold the "BOOT" button
// when you see the following lines:
// "Connecting........_____....._____....."
/////////////////////////////////////////////////
#include <WiFi.h>
#include <MQTT.h>
const char ssid[] = "ladenlokal";
const char pass[] = "puppe2010";
WiFiClient net;
MQTTClient client;
#define LED_PIN 35 //27
#define SENSOR_PIN 36
unsigned int ledState = LOW;
int sensorValue = 0;
int thresholdValue = 4000;
unsigned long lastMillis = 0;
void connect() {
  Serial.print("checking wifi...");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  Serial.print("\nconnecting...");
  while (!client.connect("arduino", "", "")) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("\nconnected!");
  client.subscribe("/led");
  // client.unsubscribe("/hello");
}
void messageReceived(String &topic, String &payload) {
  Serial.println("incoming: " + topic + " - " + payload);
}
void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(SENSOR_PIN, INPUT);
  digitalWrite(LED_PIN, ledState);
  Serial.begin(115200);
  WiFi.begin(ssid, pass);
  // Note: Local domain names (e.g. "Computer.local" on OSX) are not supported by Arduino.
  // You need to set the IP address directly.
  client.begin("192.168.236.90", 2883, net);
  client.onMessage(messageReceived);
  connect();
}
void loop() {
  client.loop();
  //delay(10);  // <- fixes some issues with WiFi stability
  if (!client.connected()) {
    connect();
  }
  // publish a message only when the sensor value goes bellow threshold:
  sensorValue = analogRead(SENSOR_PIN);
  if (sensorValue < thresholdValue) {
    //because we send Strings over MQTT we first need to convert:
    String sensorValueString = String(sensorValue); 
    client.publish("/sensor", sensorValueString);
    Serial.println(sensorValue);
  }
  // publish a message roughly every second:
  if (millis() - lastMillis > 1000) {
    lastMillis = millis();
    //client.publish("/hello", "world");
  }
}
// function for turning on/off the LED
// depending on if one recives 1/0:
void led(int LED_on_off) {
  ledState = LED_on_off;
  digitalWrite(LED_PIN, ledState);
  Serial.print("/led: ");
  Serial.println(ledState);
}Processing Code
///////////////////////////////////////////////////////////////////////////////////
// Code for ESP32 DEV MODULE 38pin version
///////////////////////////////////////////////////////////////////////////////////
// Example for sending & receiving messages via an MQTT broker with an ESP32
// Send integers '0' or '1' to the address "/led" to turn on/off an LED on pin14.
// Every time the analog sensor value on pin36 goes bellow the "threshold" value
// a message is sent to the address "/sensor" with the current sensor value.
///////////////////////////////////////////////////////////////////////////////////
// based on Shiftr.io example code by Joël Gähwiler:
// https://shiftr.io/try
// https://www.shiftr.io/docs/manuals/processing
// this code is intended for use with the Shifr Desktop App!
///////////////////////////////////////////////////////////////////////////////////
// when uploading code: sometimes necessairy
// to presss&hold the "BOOT" button
// when you see the following lines:
// "Connecting........_____....._____....."
/////////////////////////////////////////////////
import mqtt.*;
MQTTClient client;
String onOff = "0";
float backgroundShade = 0;
void setup() {
  size(400, 400);
  frameRate(25);
  client = new MQTTClient(this);
  client.connect("mqtt://192.168.236.90:2883", "processing");
}
void draw() {
  background(backgroundShade);
}
void mousePressed() {
  if (onOff == "0") {
    onOff = "1";
  } else onOff = "0";
  client.publish("/led", onOff);
}
void clientConnected() {
  println("client connected");
  client.subscribe("/sensor");
  client.subscribe("/hello");
}
float messageValue;
// incoming MQTT messages are forwarded to this messageReceived function:
void messageReceived(String topic, byte[] payload) {
  println("incoming MQTT message: " + topic + " - " + new String(payload));
  String str = new String(payload);
  int payloadInt = int(str);
  
  //if (topic == "/sensor") {
    println("sensor value: " + payloadInt);
    backgroundShade = map(payloadInt, 0, 4000, 0, 255);
  //}
  
}
void connectionLost() {
  println("connection lost");
}