IoTKit Quick Installation Guide

Purchase IoTKit

Please refer to TQLOne for options to purchase your copy of IoTKit

Meet Your IoTKit

List of things that are contained in the IoTKit

Name

Image

Description

Raspberry Pi 3 Model 3

The Raspberry Pi 3 is the third generation Raspberry Pi. It replaced the Raspberry Pi 2 Model B in February 2016. Compared to the Raspberry Pi 2 it has:

  • A 1.2GHz 64-bit quad-core ARMv8 CPU
  • 802.11n Wireless LAN
  • Bluetooth 4.1
  • Bluetooth Low Energy (BLE)

Default login password for Raspberry pi are:

pi / raspberry

Arduino Uno and Arduino Sensor Shield

The Uno is a microcontroller board based on the ATmega328P. It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz quartz crystal, a USB connection, a power jack, an ICSP header and a reset button. 

Sensors

  • Ambience Light Sensor
  • Thermistor
  • DHT11 sensor

USB camera

The USB camera is easy to use and it is interfaced to Pi.

Micro Servo motor

The micro servo motor can rotate at angle between 0 and 180 degrees and it is to be interfaces to the Arduino.

RGB 3-Color LED Module

This LED light can be set in one of the three colors – Red, Green or Blue. Provided 3 lights.

Configure the Wireless Connection

The following steps will setup the Wireless connection on raspberry pi.

  1. Connect USB cable (A in Figure above) from Arduino to Raspberry Pi USB Port (Any of the four available)
  2. Connect USB cable (B in Figure above) from USB Camera to Raspberry Pi USB Port (Any of the four available)
  3. Connect mini USB power cable (C in Figure above) to Raspberry Pi mini USB power port and power supply.
  4. Wait for Raspberry Pi to startup.
  5. Raspberry Pi will start in in Wireless router mode giving out Wi-Fi network name as IOTKit-Pi3 
  6. Connect your laptop to IOTKit-Pi3 Wi-Fi network name using password atomiton
  7. Launch a web browser and type http://1.1.1.1:8080/fid-kitsetupui/index.html
  8. Configure your personal Wi-Fi Network. Note that you can configure multiple Wi-Fi Networks.
  9. After Raspberry Pi rebooted, connect your laptop back to your personal Wi-Fi network.
  10. Login to TQLStudio portal using your TQLStudio credentials.
  11. Click on any of your project and go to Thing Spaces to view the IP address assigned to IoTKit Raspberry Pi
  12. Launch TQLEngine User Interface by clicking on the IP Address link
  13. Login to TQLEngine UI default credentials [Username: TQLEngine@atomiton Passwrod: tql123]
  14. You will find two default projects loaded - IoTKitThings and IoTKitSetup
  15. Refer to Working with IoTKit Things below.

Working with IoTKit Things

Working with Sensors

Detect Serial Port
Detect Serial Port Name
<Query>
  <Find format="version,Known">
    <SerialPortModel>
      <ID ne=""/>
    </SerialPortModel>
  </Find>
  <if condition="$Response.Message.Value/Find/Status eq 'Success'">
    <then>
      <DeleteAll>
        <SerialPortModel>
          <ID ne=""/>
        </SerialPortModel>
      </DeleteAll>
    </then>
  </if>
  <Create>
    <SerialPortModel>
      <PortName>
        $Null()
      </PortName>
      <Baudrate>
        9600
      </Baudrate>
      <DefaultPort>
        /dev/cu.usbmodem1411
      </DefaultPort>
    </SerialPortModel>
  </Create>
</Query>
Get Serial Port
GetSerialPort
<Query>
  <Find format="version, known">
    <SerialPortModel>
      <ID ne=""/>
    </SerialPortModel>
  </Find>
</Query>
Get Serial Port Response

PortName attributes "Known" value contains the Serial Port on which the Arduino is connected to the Raspberry Pi. The value here is: /dev/ttyACM0

GetSerialPort Response
<Find Status="Success" Format="version, known">
  <Result>
    <SerialPortModel>
      <ID>K264G7FLAAAH6AABAF46QU4Z</ID>
      <PortName Value="" Known="/dev/ttyACM0
" Version="1"/>
      <Baudrate Value="9600" Known="9600" Version="1"/>
      <DefaultPort Value="/dev/cu.usbmodem1411" Known="/dev/cu.usbmodem1411" Version="1"/>
    </SerialPortModel>
  </Result>
</Find>


Arduino Sketch

The Arduino Sketch uses two other libraries,

  1. OneWire
  2. Dallas Temperature

this libraries can be imported in the Arduino IDE, below are the steps to install the libraries

  1. In the toolbar menu select sketch, then Include Library→ Manage Libraries option.



  2. Search for the Dallas Temperature library and Install it, similarly search for one wire library and install it.


Arduino Sketch
#include <math.h>
#include <Servo.h>
#include <OneWire.h>
#include <DallasTemperature.h>


#define ONE_WIRE_BUS 12 /*-(Connect to Pin 12 )-*/

/*-----( Declare objects )-----*/
/* Set up a oneWire instance to communicate with any OneWire device*/
OneWire ourWire(ONE_WIRE_BUS);

/* Tell Dallas Temperature Library to use oneWire Library */
DallasTemperature sensors(&ourWire);

//Create servo object
Servo myservo;
int sensorPinL = A4; // select the input pin for the potentiometer

String inData;
int redPinOne = 1;
int greenPinOne = 2;
int bluePinOne = 3;

int redPinTwo = 5;
int greenPinTwo = 6;
int bluePinTwo = 7;

int redPinThree = 9;
int greenPinThree = 10;
int bluePinThree = 11;

String getTemperature() {
  sensors.requestTemperatures();
  String tempStr = "TEMPC:" + String(sensors.getTempCByIndex(0)) + "#TEMPF:" + String(sensors.getTempFByIndex(0));
  //String tempStr = "TEMPC:" + String((int)sensors.getTempCByIndex(0)) + "#TEMPF:" + String((int)sensors.getTempFByIndex(0));
  return tempStr;
}

//KY015 DHT11 Temperature and humidity sensor
int DHpin = 8;
byte dat [5];
byte read_data () {
  byte data = 0;
  for (int i = 0; i < 8; i ++) {
    if (digitalRead (DHpin) == LOW) {
      while (digitalRead (DHpin) == LOW); // wait for 50us
      delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1'
      if (digitalRead (DHpin) == HIGH)
        data |= (1 << (7 - i)); // high front and low in the post
      while (digitalRead (DHpin) == HIGH); // data '1 ', wait for the next one receiver
    }
  }
  return data;
}

void start_test () {
  digitalWrite (DHpin, LOW); // bus down, send start signal
  delay (30); // delay greater than 18ms, so DHT11 start signal can be detected

  digitalWrite (DHpin, HIGH);
  delayMicroseconds (40); // Wait for DHT11 response

  pinMode (DHpin, INPUT);
  while (digitalRead (DHpin) == HIGH);
  delayMicroseconds (80); // DHT11 response, pulled the bus 80us
  if (digitalRead (DHpin) == LOW);
  delayMicroseconds (80); // DHT11 80us after the bus pulled to start sending data

  for (int i = 0; i < 4; i ++) // receive temperature and humidity data, the parity bit is not considered
    dat[i] = read_data ();

  pinMode (DHpin, OUTPUT);
  digitalWrite (DHpin, HIGH); // send data once after releasing the bus, wait for the host to open the next Start signal
}


String getHumidity () {
  start_test ();
  String hum = "";
  hum = "HUMPCT:" + String(dat [0], DEC) + "." + String(dat [1], DEC);
  return hum;
}

int ledPin = 13; // select the pin for the LED

String getLight() {
  String amb = "";
  int sensorValue = 0; // variable to store the value coming from the sensor
  sensorValue = analogRead(sensorPinL);
  digitalWrite(ledPin, HIGH);
  delay(sensorValue);
  digitalWrite(ledPin, LOW);
  delay(sensorValue);
  amb = "AMB:" + String(sensorValue, DEC);
  return amb;
}



void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(500);

  pinMode(redPinOne, OUTPUT);
  pinMode(greenPinOne, OUTPUT);
  pinMode(bluePinOne, OUTPUT);

  pinMode(redPinTwo, OUTPUT);
  pinMode(greenPinTwo, OUTPUT);
  pinMode(bluePinTwo, OUTPUT);

  pinMode(redPinThree, OUTPUT);
  pinMode(greenPinThree, OUTPUT);
  pinMode(bluePinThree, OUTPUT);
  pinMode (DHpin, OUTPUT);
  pinMode (ledPin, OUTPUT);
  myservo.attach(4);
  sensors.begin(); // For Temperature Sensor Begin Dallas Library

}


void RGB_control(String temp, int light)
{
  int redval = temp.charAt(0) - '0';
  int greenval = temp.charAt(1) - '0';
  int blueval = temp.charAt(2) - '0' ;

  switch (light)
  {
    case 1:
      digitalWrite(redPinOne, redval);
      digitalWrite(greenPinOne, greenval);
      digitalWrite(bluePinOne, blueval);
      break;
    case 2:
      digitalWrite(redPinTwo, redval);
      digitalWrite(greenPinTwo, greenval);
      digitalWrite(bluePinTwo, blueval);
      break;
    case 3:
      digitalWrite(redPinThree, redval);
      digitalWrite(greenPinThree, greenval);
      digitalWrite(bluePinThree, blueval);
      break;

  }
}

void loop() {
  inData = "";
  if (Serial.available() > 0)
  {
    int h = Serial.available();
    for (int i = 0; i < h; i++) {
      inData += (char)Serial.read();
    }

    if (inData.indexOf("RGB") >= 0)
    {
      RGB_control(inData.substring(6, 9),(int)(inData.charAt(4)-'0'));
    }
    else
    {
      myservo.write(inData.toInt());
    }
  }

  Serial.println(getTemperature() + "#" + getHumidity() + "#" + getLight());
  delay(1000);
}