Initial commit

This commit is contained in:
Manuel Weiser 2018-07-08 16:49:29 +02:00
commit bee06ab191
5 changed files with 276 additions and 0 deletions

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
.pioenvs
.piolibdeps
.clang_complete
.gcc-flags.json

67
.travis.yml Normal file
View File

@ -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

41
lib/readme.txt Normal file
View File

@ -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 <Foo.h>
#include <Bar.h>
// 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

14
platformio.ini Normal file
View File

@ -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

150
src/Duftsprueher.ino Normal file
View File

@ -0,0 +1,150 @@
#include <Arduino.h>
#include <ESP8266WiFi.h> //ESP library from http://github.com/esp8266/Arduino
#include <PubSubClient.h> // MQTT library from http://github.com/Imroy/pubsubclient
#include "Servo.h"
#include <Adafruit_NeoPixel.h>
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<length; i++) {
message_buff[i] = payload[i];
}
message_buff[i] = '\0';
// Konvertierung der nachricht in ein String
String msgString = String(message_buff);
Serial.println("Payload: " + msgString);
// if virtual push button was pressed
if (msgString.equalsIgnoreCase("1")){
Serial.println("Virtual push button");
s1.attach(SERV1);
delay(400);
s1.write(55);
delay(1000);
s1.write(90);
delay(1000);
s1.detach();
}
}
void reconnect() {
// Loop until we're reconnected
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
if (client.connect("arduinoClient")) {
Serial.println("connected");
client.subscribe(mqtt_air_topic);
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}