=====MQTT broker===== This page will explain how to turn your Raspberry Pi 3 (also works with 3+) into a broker with a Wifi access point. Having the Raspberry Pi working as an access point means 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, you can follow the instructions [[https://randomnerdtutorials.com/how-to-install-mosquitto-broker-on-raspberry-pi/|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: {{:software:raspibroker.zip| Raspberry broker}} And you can find a guide on how to install it [[https://www.raspberrypi.org/documentation/installation/installing-images/|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, insert it into your Raspberry and boot it up. The Wifi-AP service should activate on its own. But to start 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 you should next try connecting your laptop (or other) device to Raspberry and test publishing and subscribing to messages with it. A good program for debugging is [[en:iot:examples:setup:debugging|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. 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 module with the Button module and upload the following test code to this module: Libraries in platformio.ini lib_deps = ITTIoT, blackketter/Switch Source code #include #include #include #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 #include #include #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 Pi and both modules. Wait until RGB lights up, and then try to press the button on the Button module. RGB module colour should turn green. If this happens, everything is set up correctly. Raspberry Pi serves wifi and MQTT broker service in the given parameters. {{:en:iot:examples:setup:broker.jpg?400|}}