This is an old revision of the document!


Raspberry as a broker

On this page, we will explain how to turn your Raspberry Pi 3 (also works with 3+) into a broker with the Wifi access point. Having the Raspberry Pi working as an access point means that you will not need an additional router (NB. we have not tested this under heavy load). If you have a spare router and do not wish to install our image then you can follow the instructions here on how to turn any Raspberry Pi into a broker.

You can download the image file for the configuration with AP and MQTT broker here:

Raspberry broker

And you can find a guide on how to install it here. You will need a 16GB (or larger) micro-SD card since the original image was on a 16 GB card. The easiest way in Linux is to download the zip file, unzip it and by using Startu Disck creator, write the image to a new SD card.

Once you have flashed the image to the SD card you should insert it into your Raspberry and boot it up. The Wifi-AP service should activate on its own. But to activate the MQTT broker enter

mosquitto -d

to the terminal window (you can use SSH or monitor and keyboard to do this). You can use the terminal on Raspbian to confirm if your broker is working. For this, open a terminal window and enter

mosquitto_sub -t "mytopic"

Then open another terminal window and enter

mosquitto_pub -t "mytopic" -m "This is my message"

If this works then the next thing you should try is connecting your laptop (or other) device to the Raspberry and test publishing and subscribing to messages with it. A good program for debugging is MQTTBox. You can find the default Wifi name and password below.

NB!! Avoid turning off Raspberry by removing the power cord since it can cause the SD card to become corrupted. You should always turn the Raspberry off via GUI or typing sudo shutdown now to the terminal (using screen and keyboard, or SSH). Upgrading Rasbian may stop the initial system from working. Always consider it when upgrading and keep a copy of important configuration files or the original system.

Passwords and other data for the raspberry broker

IP address of Raspberry Pi (for broker and SSH):

192.168.4.1

Port for MQTT broker (without password): 1883

Raspberry login (SSH):

username: pi

password: raspberry

Raspberry Wifi Access Point:

ssid: raspberryIoT

password: piIoT123

Testing

To test that everything works, use the IoT Basic kit.

Connect one Controller with the Button module and upload the following test code to this module:

Libraries in platformio.ini

lib_deps = ITTIoT, Adafruit NeoPixel

Source code

#include <Arduino.h>
#include <ittiot.h>
#include <Switch.h>
 
#define MODULE_TOPIC "rgb"
const byte buttonPin = D3;
 
Switch button = Switch(buttonPin);
 
void iot_connected()
{
  iot.log("Button online!");
}
 
void setup()
{
  iot.setConfig("wname", "raspberryIoT");
  iot.setConfig("wpass", "piIoT123");
  iot.setConfig("msrv", "192.168.4.1");
  iot.setConfig("mport", "1883");
  iot.setup(); 
}
 
void loop()
{
  iot.handle(); 
  button.poll();
 
  if (button.released()) {
    iot.log("Released");
    iot.publishMsgTo(MODULE_TOPIC,"255;0;0",0);
  }
  if (button.pushed()) {
    iot.log("ButtonPushed");
    iot.publishMsgTo(MODULE_TOPIC,"0;255;0",0);
  }
 
  delay(3);
}

then connect the second controller module with RGB module and upload the following code:

Libraries in platformio.ini

lib_deps = ITTIoT, Adafruit NeoPixel

Source code

#include <Arduino.h>
#include <ittiot.h>
#include <Adafruit_NeoPixel.h>
 
#define MODULE_TOPIC "rgb"
#define PIN            D2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);
 
String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length()-1;
 
  for(int i=0; i<=maxIndex && found<=index; i++)
  {
    if(data.charAt(i)==separator || i==maxIndex)
    {
        found++;
        strIndex[0] = strIndex[1]+1;
        strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }
  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}
 
void iot_received(String topic, String msg)
{
  if(topic == MODULE_TOPIC)
  {
    String r = getValue(msg,';',0);
    String g = getValue(msg,';',1);
    String b = getValue(msg,';',2);
    pixels.setPixelColor(0, r.toInt(), g.toInt(), b.toInt()); 
    pixels.show(); 
  }
}
 
void iot_connected()
{
  iot.subscribe(MODULE_TOPIC);
  iot.log("IoT NeoPixel example!");
}
 
void setup()
{
  iot.setConfig("wname", "raspberryIoT");
  iot.setConfig("wpass", "piIoT123");
  iot.setConfig("msrv", "192.168.4.1");
 
  iot.setup();
 
  pixels.begin(); 
  pixels.setPixelColor(0, 255, 255, 255);
  pixels.show(); 
}
 
void loop()
{
  iot.handle(); 
  delay(200); 
}

Power up Raspberry broker and both modules. Wait until RGB lights up, and then try to press the button module. RGB module colour should change to green. If this happens, everything is set up correctly, and Raspberry Pi is serving wifi and MQTT broker service in the given parameters.

en/iot/examples/setup/broker.1677706028.txt.gz · Last modified: 2023/03/01 10:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0