From bee06ab191475ec60add2b560af3463b56f639b0 Mon Sep 17 00:00:00 2001 From: Manuel Weiser Date: Sun, 8 Jul 2018 16:49:29 +0200 Subject: [PATCH] Initial commit --- .gitignore | 4 ++ .travis.yml | 67 +++++++++++++++++++ lib/readme.txt | 41 ++++++++++++ platformio.ini | 14 ++++ src/Duftsprueher.ino | 150 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 276 insertions(+) create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 lib/readme.txt create mode 100644 platformio.ini create mode 100644 src/Duftsprueher.ino diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5dac9f5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.pioenvs +.piolibdeps +.clang_complete +.gcc-flags.json diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9443843 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,67 @@ +# Continuous Integration (CI) is the practice, in software +# engineering, of merging all developer working copies with a shared mainline +# several times a day < http://docs.platformio.org/page/ci/index.html > +# +# Documentation: +# +# * Travis CI Embedded Builds with PlatformIO +# < https://docs.travis-ci.com/user/integration/platformio/ > +# +# * PlatformIO integration with Travis CI +# < http://docs.platformio.org/page/ci/travis.html > +# +# * User Guide for `platformio ci` command +# < http://docs.platformio.org/page/userguide/cmd_ci.html > +# +# +# Please choice one of the following templates (proposed below) and uncomment +# it (remove "# " before each line) or use own configuration according to the +# Travis CI documentation (see above). +# + + +# +# Template #1: General project. Test it using existing `platformio.ini`. +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio run + + +# +# Template #2: The project is intended to by used as a library with examples +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# env: +# - PLATFORMIO_CI_SRC=path/to/test/file.c +# - PLATFORMIO_CI_SRC=examples/file.ino +# - PLATFORMIO_CI_SRC=path/to/test/directory +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/lib/readme.txt b/lib/readme.txt new file mode 100644 index 0000000..131f1bf --- /dev/null +++ b/lib/readme.txt @@ -0,0 +1,41 @@ + +This directory is intended for the project specific (private) libraries. +PlatformIO will compile them to static libraries and link to executable file. + +The source code of each library should be placed in separate directory, like +"lib/private_lib/[here are source files]". + +For example, see how can be organized `Foo` and `Bar` libraries: + +|--lib +| | +| |--Bar +| | |--docs +| | |--examples +| | |--src +| | |- Bar.c +| | |- Bar.h +| | |- library.json (optional, custom build options, etc) http://docs.platformio.org/page/librarymanager/config.html +| | +| |--Foo +| | |- Foo.c +| | |- Foo.h +| | +| |- readme.txt --> THIS FILE +| +|- platformio.ini +|--src + |- main.c + +Then in `src/main.c` you should use: + +#include +#include + +// rest H/C/CPP code + +PlatformIO will find your libraries automatically, configure preprocessor's +include paths and build them. + +More information about PlatformIO Library Dependency Finder +- http://docs.platformio.org/page/librarymanager/ldf.html diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..d026671 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,14 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; http://docs.platformio.org/page/projectconf.html + +[env:esp12e] +platform = espressif8266 +board = esp12e +framework = arduino diff --git a/src/Duftsprueher.ino b/src/Duftsprueher.ino new file mode 100644 index 0000000..68b59e1 --- /dev/null +++ b/src/Duftsprueher.ino @@ -0,0 +1,150 @@ + + +#include +#include //ESP library from http://github.com/esp8266/Arduino +#include // MQTT library from http://github.com/Imroy/pubsubclient +#include "Servo.h" +#include + +extern "C" { + #include "user_interface.h" +} + +String esp_id = "duft"; + +const char *ssid = "iApfel"; // cannot be longer than 32 characters! +const char *password = "***REMOVED***"; // +const char* mqtt_server = "192.168.1.5"; + +#define SERV1 12 // Pin connected to the Servomotor +Servo s1; + +// Strings zusammen bauen +String esp = "esp_wz" + esp_id; +char *esp_name = &esp[0u]; + +//String air_topic = "esp" + String(esp_id) + "/room"; +//const char* mqtt_air_topic = &air_topic[0u]; +const char* mqtt_air_topic = "airfresh"; + +WiFiClient espClient; +PubSubClient client(espClient); + +void setup() { + // start the serial connection + Serial.begin(115200); + + setup_wifi(); + + Serial.print("Connecting to MQTT"); + client.setServer(mqtt_server, 1883); + Serial.print("Connected to MQTT"); + client.setCallback(callback); + client.publish("airfrash","hello world"); + client.subscribe("airfresh"); + + // move servomotor to neutral position + s1.attach(SERV1); + delay(400); + s1.write(90); + delay(400); + s1.detach(); +} + +void setup_wifi() { + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); + //wifi_set_phy_mode(PHY_MODE_11G); + //system_phy_set_max_tpw(50); + wifi_station_set_hostname(esp_name); + delay(10); + + // We start by connecting to a WiFi network + Serial.println(); + Serial.print("Connecting to "); + Serial.println(ssid); + //WiFi.config(IPAddress(192,168,1,20), IPAddress(192,168,1,1), IPAddress(255,255,255,0), IPAddress(192,168,1,1)); + //Serial.println(WiFi.status()); + + // animate LEDs while waiting for connection + while (WiFi.status() != WL_CONNECTED) { + Serial.print("."); + delay(50); + } + + Serial.println(""); + Serial.println("WiFi connected"); + Serial.println("IP address: "); + Serial.println(WiFi.localIP()); +} + +void loop() { + // Check WLan + if (WiFi.status() != WL_CONNECTED) { + reconnect(); + } + + // Check mqtt messages + if (!client.connected()) { + reconnect(); + } + client.loop(); +} + +// this function is called whenever a message +// is received from Adafruit IO. it was attached to +// the feed in the setup() function above. +void callback(char* topic, byte* payload, unsigned int length) { + // Zähler + int i = 0; + // Hilfsvariablen für die Convertierung der Nachricht in ein String + char message_buff[100]; + + Serial.println("Message arrived: topic: " + String(topic)); + Serial.println("Length: " + String(length,DEC)); + + // Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0 + for(i=0; i