Ekah Emmanuel
Created September 16, 2016

parkmeIot

This app can make you easy to park your car in a mall/school. You can monitor how many parking slot available and you can book.

138
parkmeIot

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1

Software apps and online services

Microsoft Azure
Microsoft Azure
python
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

beacon

Story

Read more

Schematics

Arduion client

Intel board hub

Circuit of node client

Code

parkme-hub.ino

Arduino
/*
  Parkme

  Copyright (c) 2016 Copyright Holder All Rights Reserved.
*/

//define libraries
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

//define pins

//define global variables
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(172, 16, 0, 100);
IPAddress server(188, 166, 254, 81); //domain hub-ex.xyz 188.166.254.81

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

EthernetClient ethClient;
PubSubClient client(ethClient);

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("arduinoClient", "admintes", "admin123")) {
      Serial.println("connected");
      // Once connected, publish an announcement...
      // client.publish("admintes/data","hello world");
      // ... and resubscribe
      //client.subscribe("inTopic");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(57600);

  client.setServer(server, 1883);
  client.setCallback(callback);

  Ethernet.begin(mac, ip);
  // Allow the hardware to sort itself out
  delay(1500);
}

void loop()
{
  // if (!client.connected()) {
  //   reconnect();
  // }

  //get Sensor Value from nano as hub extention
  int d = 0;
  while (Serial.available() > 0) {
    d = Serial.read();
  }
  Serial.println(d);
//  int calculatedData = parkmeFormula(d);
//  char* data = (char*)calculatedData;
//  Serial.println(data);
  // client.publish("admintes/data", data);
  // client.loop();
  delay(1000);
}

int parkmeFormula(int sensorParam) {
  if ((sensorParam >= 200) && (sensorParam <= 400)) {
    return 0;
  } else {
    return 1;
  }
}

parkmeBackend.py

Python
import time
import requests
import sys
import json
import requests.packages.urllib3
import paho.mqtt.client as paho

#Setup a loop to send Temperature values at fixed intervals
fixed_interval = 1
start_interval = 2

#Init Firebase
firebase_url = 'https://ramean.firebaseio.com/parkme'
auth_token = 'wZMtcMP8WNLhjwCeSSR0idwy3TAzyZlnQe3MnmAG'

def on_subscribe(client, userdata, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_message(client, userdata, msg):
    # print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
    strValue = str(msg.payload)
    #print msg
	dataSensor = {'value':strValue}
	dirSensor = 'slotPark'
	requests.packages.urllib3.disable_warnings()
	result = requests.put(firebase_url + '/' + dirSensor + '/.json' + '?auth=' + auth_token, data=json.dumps(dataSensor))
	print 'Record inserted. Result Code = ' + str(result.status_code)
	print '------------------------------------------\n'

def main():

	try:
		print '============================'
		print 'Welcome to ParkMe-Monitoring'
		print '     Getting Started...     '
		print '============================\n'
		time.sleep(start_interval)

		print "setting paho client"
		client = paho.Client()
		client.username_pw_set("admintes", "admin123")
		client.on_subscribe = on_subscribe
		client.on_message = on_message
		client.connect("hub-ex.xyz", 1883)
		client.subscribe("admintes/parkme", 0)

		client.loop_forever()

	except IOError:
		print('Error! Something went wrong.')
	except KeyboardInterrupt:
		print('\n\nOPERATION HAS BEEN CANCELED!\n')
		sys.exit()

	print 'System has been exit'
	sys.exit()

if __name__ == '__main__':main()

mqttGettingStarted.py

Python
import paho.mqtt.client as paho

def on_subscribe(client, userdata, mid, granted_qos):
    print("Subscribed: "+str(mid)+" "+str(granted_qos))

def on_message(client, userdata, msg):
    # print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload))
    msg = msg.payload
    #print msg
    print msg

client = paho.Client()
client.username_pw_set("admintes", "admin123")
client.on_subscribe = on_subscribe
client.on_message = on_message
client.connect("hub-ex.xyz", 1883)
client.subscribe("admintes/data", 0)

client.loop_forever()

parkme-client_V.02.ino

Arduino
/*
 Parkme

 Copyright (c) 2016 Copyright Holder All Rights Reserved.
*/

//define libraries
#include <Wire.h> library I2C
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

//define pinss
#define ledPin 5

//define global variables
#define sensor 0x1E // alamat default address sensor hmc5883l
const char payload_length = 32;
byte data[payload_length];
// float sensorParam = 0 ;

void sendData(int sensorParam) {
 String sensorVal = String(sensorParam);
 char data[32];
 sensorVal.toCharArray(data, 32);
 Mirf.send((byte*) data);
 // while (Mirf.isSending()) {
 //   /* code */
 // }
 delay(1000);
}

void setup() {
  Serial.begin(9600);
  Wire.begin();
  Wire.beginTransmission(sensor);
  Wire.write(0x02);
  Wire.write(0x00);
  Wire.endTransmission();
  pinMode(ledPin, OUTPUT);
  //NRF
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setTADDR((byte *)"serve");
  Mirf.payload = payload_length;
  Mirf.channel = 123;
  Mirf.config();
}

void loop() {
  int Z; //triple axis data

  Wire.beginTransmission(sensor);
  Wire.write(0x05);
  Wire.endTransmission();

  //Read data from each axis, 2 registers per axis
  Wire.requestFrom(sensor, 6);
  if (6 <= Wire.available()) {
    Z = Wire.read() << 8; //Z msb
    Z |= Wire.read(); //Z lsb

  }

  //Serial.print("Medan magnet sumbu Z : ");  // MEDAN MAGNET SUMBU Z BERADA PADA RANGE 300 - 500
  Serial.println(Z);

  if ((Z >= 200) && (Z <= 400)) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  sendData(Z);
  delay (1000);
}

Credits

Ekah Emmanuel

Ekah Emmanuel

0 projects • 3 followers
I am a DIY it enthusiast who us interested in innovation and transferring knowledge, I have a great of experience C#, ASPX, PHP, HTML, Azure and electronics

Comments