Latest Entries »

This tutorial is of 2 parts.

First part explains the following :

–Starting a Server on your PC  & start listening on a port (say 350) . For this we use SOCKET TEST or HERCULES software

— Once the port is listening , we test communication locally using PuTty

— Windows Firewall setting has to be done for a NEW INBOUND RULE allowing port 350 for communication.

— For connecting to this port from external world , PORT FORWARDING to be done in Router’s Virtual Server setting so that any contact to the public IP is routed to the PORT 350 .

 

Second part is practical demo using GSM SIM900 or ESP8266 with Arduino.

 

The following picture shows my simple home network connections.A BINATONE make Router is used to connect to the Internet provider Airtel Broadband.The IP address of the Router is

192.168.1.1

which is the Gateway IP address used to access the settings on Router.My Laptop is connected over WIFI to this Router.The Router assigns a local IP address to my PC which is

192.168.1.150

Apart from these, the Internet Provider assigns a Public IP to my Network which is

122.178.80.228

This is the IP by which external world can contact my network.

Note that all these IP addresses are DYNAMIC & changes every time I power up the Router.

In another post I’ll explain how to make these IP addresses STATIC , so that the IP remain the same always.

set1

 

All the Network Tools I’ve used for this demo can be downloaded HERE.

Let us start  a server on port 350 using the SOCKET TEST tool.

This tool allows us to start a server easily.Click on the SERVER Tab & then feed in the port number where you want to listen.

Click on START LISTENING.

soc1

Now the server is up & running.It starts listening on port 350.

Remember to avoid the standard ports like 80 ( http) , 21 (FTP), 23 (TELNET), 22 (SSH) ,etc which are well known ports ,pre assigned for the particular protocol.

The dynamic range of port number you can assign goes up to 65535 or 2^16-1 (16 bits).

The IP address of the router can be known from the command window

RUN –> CMD –> ipconfig

The Default Gateway IP is the address of the Router.

RUN1

 

LOCAL TESTING TOOLS (optional)

 

Once the port is assigned for the server , you can use the ADVANCED PORT SCANNER tool to verify the port on the particular IP.

In the screen shot below you can see that the port number 350 is discovered as a TCP Server port on my PC whose local IP is 192.168.1.150

 

port_scanner

While the port scanner is scanning , you get messages on your SOCKET TEST window.

Here you can see the Port scanner software connecting to the port & then disconnecting after scanning.

port_message

 

Alternatively you can use a PUTTY serial port tool to test local communication.

Select the connection type as RAW & provide the host IP which is 192.168.1.150 & thtn the port number 350

putty1

Click on open , to see the New client connection on the Socket test window.

putty4

 

Now you can test two way communication between  socket test (server) & putty ( client).

putty2

 

WINDOWS FIREWALL SETTINGS

 

The Windows Firewall settings has to be done to allow the port 350 to listen from outside.

Open the Windows Firewall & Advanced Security window.

Click on Inbound Rules & then New Rule.

windows1

 

Select the Rule Type as PORT & in the next screen select protocol as TCP.

Under Specified local ports feed the port number as 350

windows2

 

Under Action window select Allow the Connection

Next window is Profile window , here tick mark all – Domain,Public & Private.

Provide a name to the Rule & save it.

Now your PORT 350 is allowed to listen by the Windows Firewall.

windows3

 

PORT FORWARDING

This step is final where you redirect the incoming request to the port number of local IP where the server is started.

Here my local PC’s IP is 192.168.1.150   &  server is started on port 350.

Anyone from external world connecting to my public IP has to be directed to the port 350 on local IP 192.168.1.150.

This is called PORT FORWARDING , which is very widely used in CCTV Remote viewing & in Gaming.

The setting has to be done in your Router.

Type in the Gateway IP of your Router , here it is 192.168.1.1 , on your browser & provide the user name & password.

Here is an excellent website showing all screen shots of almost all Routers in the world

https://portforward.com/router.htm

 

Mine is BINATONE Router.

You’ve to search for something called VIRTUAL SERVER on the router setting.

 

ROUTER1

 

For my Router it’s hidden under ADVANCED SETUP –> NAT –> VIRTUAL SERVER

For more details you can visit the above portforward link

Create a new Virtual server listing by entering the

— Port number , which is 350 .Enter same number at all fields like start & stop.

— Local IP address , here you provide the IP where server is started , 192.168.1.150

— save the listing

router3

 

Once saved , the port number 350 is open to outside world.

Online port open test tools are available

www.canyouseeme.org

www.yougetsignal.com

 

Once you open the link , your public IP will be automatically shown.

Fill in the PORT number to be checked & click on CHECK button.

If you see SUCCESS , then you’re done with PORT FORWARDING

 

canyou1

 

port_open

 

Following is the list of AT commands used by the GSM SIM900A to contact the server.

This is for part 2 of the post.PART 2 LINK HERE

gsm1

gsm2

cooltext753793315   cooltext753790696

 

 

This post is on retrieving particular Data from a web page using SIM900A & Arduino.

For e.g we shall retrieve the Blog Status hits of my blog in which you’re reading this.

We’ve to create an API link for this data so that data can be retrieved using SIM900A.

To create API link we use the THINGSPEAK.com website.

First let us read the XPATH details of the data wanted as below :

The procedure is related to Google Chrome WebBrowser

 

Image 1

 

Right click on the data to be retrieved & click on INSPECT .

 

inspect

 

A highlighted code will be displayed on which Right click & then select COPY  –> COPY XPATH

XPATH

 

The copied XPATH detail has to be used in THINSPEAK account to create the API link.

Open your thingspeak account & click on APPS –> THINGHTTP

 

thing1

Click on NEW THINGSPEAK to create a new “thing”.

thing2

 

You can provide a suitable Name for the App & under URL provide the website link from where you want the data from.

Method is GET & version is 1.1

thing3

 

Scroll down to bottom & under the PARSE STRING field paste the XPATH copied from the website.

thing4

Click on SAVE & you see the API LINK generated.

thing5

 

You can use this API link in your browser to confirm the data retrieved.

Image 15

Now let us see the practical application using SIN900A GSM & ARDUINO.

The connections between Arduino & GSM are :

Rx of GSM —> pin 8 (Tx) of Arduino   (since we use the SoftSerial in Arduino code , we declare pins 7 & 8 for Serial communication)

Tx of GSM –> pin 7 (Rx) of Arduino

GND –> GND

A separate power source is required for the GSM.

Following are the AT commands used

http

DOWNLOAD Arduino code HERE

————————————————————

#include <SoftwareSerial.h>
SoftwareSerial myGsm(7,8);

void setup()
{
myGsm.begin(9600);
Serial.begin(9600);
delay(500);

myGsm.println(“AT+CGATT=1”);
delay(200);
printSerialData();

myGsm.println(“AT+SAPBR=3,1,\”CONTYPE\”,\”GPRS\””);//setting the SAPBR,connection type is GPRS
delay(1000);
printSerialData();

myGsm.println(“AT+SAPBR=3,1,\”APN\”,\”\””);//setting the APN,2nd parameter empty works for all networks
delay(5000);
printSerialData();

myGsm.println();
myGsm.println(“AT+SAPBR=1,1”);
delay(10000);
printSerialData();

myGsm.println(“AT+HTTPINIT”); //init the HTTP request
delay(2000);
printSerialData();

myGsm.println(“AT+HTTPPARA=\”URL\”,\”http://api.thingspeak.com/apps/thinghttp/send_request?api_key=VV7WQ9DS19E2BNNI\””);// setting the httppara,
//the second parameter is the website from where you want to access data
delay(1000);
printSerialData();

myGsm.println();
myGsm.println(“AT+HTTPACTION=0”);//submit the GET request
delay(8000);//the delay is important if the return datas are very large, the time required longer.
printSerialData();
myGsm.println(“AT+HTTPREAD=0,20”);// read the data from the website you access
delay(3000);
printSerialData();

myGsm.println(“”);
delay(1000);
myGsm.println(“AT+HTTPTERM”);// terminate HTTP service
printSerialData();

}

void loop()
{
}

void printSerialData()
{
while(myGsm.available()!=0)
Serial.write(myGsm.read());
}

—————————————————————-

AT+CGATT=1  enables the GPRS CONNECTION

AT+SAPBR is used to declare the Connection Type as GPRS

& Then the APN –Access Point Name of the mobile service provider is given.

An empty string also will work.Or you can slide the SIM into your Android mobile

under Settings –. More –> Cellular Networks  –> Access Point Names

you get the APN details

AT+SAPBR=1,1  enables the GPRS & APN settings & then HTTP is initialized with AT+HTTPINIT

HTTP parameters are then provided as “URL” & the API link we created earlier.

Note to use HTTP ( not HTTPS) in the link, as we use AT commands for HTTP only here.

AT+HTTPACTION=0 enables GET action

The GSM respons with

+HTTPACTION:0,200,12

Here 0 means GET action & 200 means OK , 12 bytes are retrieved.

If you get 600 instaed of 200 ,then it means a Network Error.

AT+HTTPREAD command is used to read the Data.

 

Image 11

cooltext753793315   cooltext753790696

 

A6 GSM  is introduced by the makers of ESP8266 , AI-THINKER.

The module is much cheaper than SIM900 & connections are quite simple.In this post we shall see how to connect with Arduino to make a call & send SMS.

A mobile adapter is enough to power up the A6 GSM module.The Vcc pin of GSM must be looped with PWR_KEY pin.This acts as a chip enable.You can leave this connected or remove after a moment.The module just requires a HIGH trigger at PWR_KEY pin while started.

A valid SIM is used at the back side of the module.The SIM slot provided is for a Micro SIM.If you ‘ve a Nano SIM you need to use a converter to fit the slot.

The RxD pin of A6 GSM is connected to Tx of Arduino

The TxD pin of A6 goes to Rx of Arduino.

GND pin of A6 to GND of Arduino.

 

Connection

 

 

PIN_DETAILS_A6

Initial TESTING

Power up the module & then after a moment make a call to the SIM number used in the GSM module from another phone.If you get the RING Back tone , it means the module is ready.As there is no LED indication provided , this initial step is required to confirm working.

 

Making a CALL

 

Connect the USB cable of PC to Arduino & upload this code for making a call.Remember to disconnect connections at Rx/Tx before uploading the code.

Image 1

 

The mobile number to be called is stored in an Array of char variable.

In the void setup() code we begin Serial communication at 9600 baud.Though the default baud rate of A6 GSM is 115200 , it is effective to use 9600 baud .

ATD command followed by the number to be called is used to make a call.

A semicolon at the end is not a must as in SIM900.The call will be made even if you do not use a semicolon.

After a delay of 8 secs ATH command is sent to terminate the call.

You can open the Serial monitor of Arduino & watch the AT commands landing.You should set the baud rate as 9600 in the Serial monitor as well.

The void loop() function is left empty.In case you try the code inside loop , the call will be repeatedly

made for ever.

 

Sending SMS

Now let us see the method to send SMS.

Following screenshot shows the code for sending SMS.

Image 2

 

DOWNLOAD Arduino code HERE

AT+CMGF=1

which will allow you to read and write SMS messages as strings instead of hexadecimal characters.

Serial.println is used to send the AT command with a New line (Enter).

After a delay of 2 seconds next command

AT+CMGS=”phone_no.”

is sent.The target phone number is to be given within double quotes. Note the usage of

Serial.write(0x22)  which is the ASCII equivalent for double quotes.

0D followed by 0A are the ASCII equivalents for  CARRIAGE RETURN & LINE FEED.

The delay of 2 seconds is a must after setting the GSM to text mode AT+CMGF=1

Try this code without the delay , you won’t get response.

After the 0D , 0A a delay of 2 seconds is provided & then the message to be sent is given.

CTRL+Z is finally given to send the message.

This is provided by the ASCII equivalent 1A or char(26)

Watch this video :

 

 

cooltext753793315    cooltext753790696

TOUCH screen LCDs are now available for use with Raspberry PI.

7 Inch LCDs work straight from the box as soon as you plug it onto your PI.No driver is required , but the touch response is poor & screen width is not full.

This post walks you through the steps of installing proper Drivers for touch to work smoothly & also installation of virtual keyboard is introduced.

The 7 inch LCD used here has a resolution of 800 x 480 pixels & the screen is Capacitive Touch.

HDMI interface is provided for Display &  USB interface for touch control. Both the HDMI & USB cables are provided in the box.

Connect the HDMI cable to the HDMI port of Raspberry PI & THE USB cable to any one port of the RPI.Slide the mini switch to ON position.

Provide a 5v 2Amp power source to the RPI , no separate power is required for the LCD

Image 2

 

7in_1    7in_3

 

Connect the RJ45 cable from the Internet providing Router to the RJ45 jack of Raspberry PI.In case of PI3 also this internet connection is a must for driver download & setup.Later you can switch on the WIFI on PI3 to connect with internet.

Insert the micro SD card with the latest RPI3 RASPBIAN Image on to the PI & switch ON the power.

You can see the initial screen is not Full screen. But interestingly , the touch will work.

Image 3

 

step 1 : CONFIG.txt editing to get FULL Screen Display :

To get the full screen display , you need to edit the CONFI.TXT file inside /boot folder.You can remove the SD card & plug it to PC using a card reader.

Open the folder & look out for the CONFIG.TXT file .Open this file using Wordpad or Notepad++.

Scroll down to the end of the file & append these lines :

Image 4

 

Setting max_usb_current=1 sets the available current over USB to 1.2A (default is 600mA)
This can help if you have a decent power supply (2A, at least) and need to power the external Touch screen display.

For supporting HDMI modes that aren’t from the official CEA/DMT list of modes
use  hdmi_mode=87

& then define the CVT – Coordinated Video Timings

The  hdmi_cvt 800 400 60 6 0 0 0
defines the timings of the component video signal

hdmi_cvt=<width> <height> <framerate> <aspect> <margins> <interlace> <rb>
width        width in pixels
height       height in pixels
framerate    framerate in Hz
aspect       aspect ratio 1=4:3, 2=14:9, 3=16:9, 4=5:4, 5=16:10, 6=15:9
margins      0=margins disabled, 1=margins enabled
interlace    0=progressive, 1=interlaced

 

Save this changes.Remove the SD card & plug it to RPI.

On rebooting you can find the FULL SCREEN display , but sadly the TOUCH performance will degrade. The touch selection will not be the one you insisted on touch.

To solve this problem you need to install the drivers.

 

step 2 : TOUCH DRIVER DOWNLOAD & Preparation

To install the Drivers , open the browser on PI & browse to

http://www.waveshare.com/wiki/5inch_HDMI_LCD

Scroll down to the driver section & download the driver which says

LCD-show-160811.tar.gz

http://www.waveshare.com/w/upload/3/3d/LCD-show-160811.tar.gz

driver

 

Click on the link to Download.

By default the tar file will be downloaded to  /root/Downloads

down_root

Using FILE MANAGER locate this folder & copy the downloaded tar file.

Now paste this file under /home/pi/Downloads

Right click the file & click on Extract Here..  to unzip the file.

down_2

 

down_3

Now you can see the unzipped folder.

Copy the PATH to this folder or note down the path , as we need it to install from within the Terminal.

unzip2

 

step 3 : DRIVER INSTALLATION

 

Open the Terminal & change directory to the PATH copied as in above step.

The path is  /home/pi/Downloads

Note the capital D in Downloads , as Linux is case sensitive.

To list the contents use ls  command

The list will display the folder LCD-show which contains the driver we need.

 

lcdshow1

Change Directory to LCD-show.

ls to list the contents

LCD-800×480-show  is the driver we need to install.

 

lcdshow2

To install use the command  dot forward slash LCD7-800×480-show

  ./LCD7-800×480-show

lcdshow_ins

The RPI will Reboot automatically & displays Full Screen.

Now try the TOUCH Functionality.It will be breeze to use the touch now, after driver installation.

 

step 4 : VIRTUAL KEYBOARD Installation

Now is the time to install the virtual keyboard .This avoids the physical keyboard & is a must for a touch screen.

Under Terminal type in

sudo apt-get install matchbox-keyboard

The keyboard installation starts.

When prompted , enter y to continue.

 

key2

Once the installation is over you can see the KEYBOARD under Accessories.

keyboard

 

If the KEYBOARD Icon is not seen under Accessories , click on

Preferences —> Main Menu Editor.

pref1

Under Main Menu Editor , put a tick mark against KEYBOARD.

A reboot is required.

pref2

Now open the KEYBOARD & enjoy.

keyboard2

 

Watch this demo VIDEO :

 

5 inch TOUCH SCREEN for RPI :

http://www.alselectro.com/7-inch-touch-screen-for-rpi–hdmi.html

 

cooltext753793315    cooltext753790696

 

After the huge success of the ESP8266 IOT modules , the AI-THINKER company now introduces the new GSM Module A6.In near future this module will be available at half the price of SIM900.

 

GSM_3

 

This is mini GSM / GPRS core development board based on GPRS A6 module. It supports dual-band GSM/GPRS network, available for GPRS and SMS message data remote transmission.
The board features compact size and low current consumption. With power saving technique, the current consumption is as low as 3mA in sleep mode.

Features:
– Working frequency: quad-band network, 850 / 900 / 1800 / 1900MHz
– Working voltage: 4.5~5.5V DC (On-board voltage regulator circuit supply power for A6 module)
– Working current: maximum of 2A
– Sleep current: 5mA
– Onboard Micro SIM card holder, you can install Micro SIM card
– Onboard Micro USB interface for external power supply
– Communication Interface: TTL serial port
– Baud rate: 115200bps and it can also be set by AT command.
– Interface logic voltage: 3.3V
– Make and answer phone calls using a headset and electret microphone.
– Send and receive SMS messages.
– Send and receive GPRS data (TCP/IP, HTTP, etc.) .

PIN DETAILS OF A6 GSM :

PINOUT_ALS

 

To test the module we make use of an USB-TTL module built on CP2102 .

CP2102

 

The connections between A6 GSM & CP2102 module are :

A6 GSM             USB-TTL Board

———-       ————

UART_TXD    —>  Rx

UART_RXD    —>  Tx

GND            –>    GND

The A6 GSM can be powered up with a cell phone charger for which a mini usb socket is provided at the back side.Its advisable to use 5v 2Amp adapter.

Insert a valid SIM to the SIM holder seen at the bottom side of the module.

 

A6_BACK

 

Connect the USB-TTL board to the PC & open the Device Manager to note the COM port alloted.

Open the TERMINAL Software & select this port .Select baud rate as 115200 & click connect.

TERMINAL SOFTWARE Download

 

ter1

 

The GSM module takes around 10 secs to boot up & finally you get CREG 1.

Now you can type in AT commands.The GSM A6 module requires a Carriage Return after every AT command .You can tick mark the CR found at the bottom right of Terminal before sending any command.Or you can make use of the SET MACROS function .Here you store the AT commands followed by $ sign & then 0D .

The $ sign is to Append & the 0D is the ASCII for Carriage Return.

ser3

AT commands are stored in M1,M2,M3,… as shown in screen shot above.

Now if you click on M1 , AT command is sent with CR & you get OK response.

Clicking M2 will send ATDxxxx to dial a number . The semicolon after the number is not a must as in SIM900.

ATH disconnects the call.

To send SMS

AT+CMGF=1  to set the TEXT Mode

AT+CMGS=”phone_no.”

Now you get a  >   symbol & the module waits for you to type in the message.

After typing the test message a CTRL+Z is to be sent .This is done by appending 1A which is the ASCII for the CTRL+Z

Watch this demo video :

 

 

 

 

http://www.alselectro.com/gsm-a6-board.html

http://www.alselectro.com/gsm-a6-full-kit-with-lcd—keypad.html

 

cooltext753793315    cooltext753790696

 

Image 2

 

Image 1

 

Introducing a new ESP8266 Development Board with an ESP-12, a 3x AA battery holder, a voltage regulator, an RGB LED, several red LEDs, and a light sensor LDR on the ADC input all on one board.

The board can be controlled by an open source Android App which is available from the AI-THINKER Website.

GPIO pins are extended with berg pins for easy external connections. RXD,TXD & GND pins are provided for programming / firmware upgrading. A yellow jumper is provided to pull GPIO0 pin to GND during programming. During normal operation this jumper must be removed.

The board is powered by 3 nos AA batteries , for which a battery box is already wired. On board 3.3v regulator is provided for a stable power supply.

No power switch or Reset switch is provided. To switch off you need to pull out one of the batteries.

The board comes pre-loaded with a demo which does actually seem to work.  If you have an Android based phone or tablet you can download AI-Thinker’s app to control and mix the color balance on the RGB LED and to switch the other LEDs on and off.

The Android Application can be downloaded from :

https://play.google.com/store/apps/details?id=com.duvallsoftware.iotdemoapp

 

There are also 6 red LEDs fixed with the necessary resistors connected to GPIO16, GPIO14, GPIO5, GPIO4, GPIO0 and GPIO2. A BLUE LED is always ON if the board is powered.

The GPIO13, GPIO12 and GPIO15 are connected to a RGB LED which allows you color mixing using PWM.

ADC

The analog-digital converter is also available on a pin & connected to a light resistor. This lets you quickly test the ADC and you still can clip the resistor off if you want to measure another analog source.Remember the range of ADC is max 1v & not 0 to 3.3v

If you don’t want to use the light sensor or the LEDs you can simply clip them off. Then you’ll just have an  ESP8266 with 3xAA power supply, 9 available GPIO pins and one ADC.

On the playstore of your Android device search for  IOT DEMO App & install it.

Open the Settings & enable WIFI of the Android phone.Now power on the ESP board to see the AI-THINKER SSID on your mobile.

PAIR this with the ESP board using password ai-thinker

Now open the app & touch on LED 1 to 6 , to see the corresponding light glowing on the ESP board.On the top you can see 3 icons with sliders in the App. Use this to mix colors on the 3 color LED of ESP board.

Once the functioning of board is verified , you can proceed to connect the GPIO pins of ESP board with a 4 channel Relay board.

The 4 channel relay board used requires a separate power source of 5V, 1amp.For demo 2 of the GPIO pins are connected to relay 1 & relay 3.The GND pins of both ESP & the Relay. board to be made common.

You can watch this video to learn the home automation basics with ESP board :

 

 

 

cooltext753793315    cooltext753790696

 

A regular LCD requires a lot of wires (parallel interface) to be connected with a Microcontroller.The Serial LCD  backpack built on PCF8574 IC uses the I2C bus to convert  the parallel interface to a serial one.This needs only 2 wires SDA & SCL , apart from the power connections.

The I2C backpack can be soldered on to the LCD .It can be used for 16 x 2 , 16 x 4  &  20 x 4 LCDs that have HD44780 IC .

 

I2C

 

The blue preset is to adjust the contrast of the LCD. The black jumper on the left is to enable the Backlight of LCD. The I2C device has a HEX address by which a microcontroller can communicate with it.This is set by the 3 bits A0,A1 ,A2 .If no jumper is present , it is HIGH &  a jumper means LOW. By default all the 3 jumpers are open . ie., A0,A1 A2 all are 1s.

By setting this address lines you can connect upto 8 devices to the same I2C bus.

Eight programmable slave addresses possible using these three address pins.

 

I2CLCD

The I2C bus has 2 bidirectional active wires SDA & SCL .They are joined to positive supply through a pull up resistor of 4k7.When the bus is  idle both lines are pulled high.

The expanders can be configured to have a unique 7 bit address. The first 4 bits are factory configured to

0100 for PCF8574/PCF8574T

0111 for PCF8574A

The lower 3 bits are settings on device pins A2,A1,A0.

The eighth bit specifies whether the following data is a Read  or Write operation.

Following table describes how the address is arrived.By default the factory setting is A2,A1,A0 all open leading to all 111.

First 4 bits are factory set to 0100 for PCF8574T/PCF8574 .If the port expander IC is PCF8574A , the first 4 bits will be 0111.

For calculating the address a 0 is added at the MSB (R/W bit not taken into account for calculation)

Hence the default I2C address of the module is HEX 0x27 .

 

ADDRESS

 

jumper

 

Now let us see how to use this backpack with Arduino UNO.

To start with download the latest Library from this link :

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

NewliquidCrystal_1.3.4 is the latest file at the time of writing this blog

lib1

Unzip the downloaded file & copy the folder NewliquidCrystal.

Paste this folder into your Arduino libraries folder.

Generally the path is C:\ProgramFiles\Arduino\libraries

 

lib2

 

lib3

Now open the Arduino IDE (make sure your Arduino IDE is the latest version).

Under File –> Examples , you can see the NewliquidCrystal

lib4

 

To know the I2C address of the device there is a scan code in Arduino forum.

Before starting the test , make sure that the I2C back pack is soldered properly on to the LCD.Here we make use of a 16 x 2 LCD.

Connections between Arduino & I2C LCD  are done as below :

CONN

 

Upload the scanner code on to the Arduino. Open the Serial monitor & set the baud rate to 115200.

The code scans for the I2C devices & lists the address in HEX format.

In our test we’ve connected a backpack I2C with no jumpers on A2,A1,A0 , which results in 0x27

This is the Slave address of the device.

scan1

 

The LCD Library & some sample code can be downloaded from :

http://www.alselectro.com/files/Library_codeexamples.zip

 

Once the connections are made, open the Arduino IDE .Make sure that you use the IDE later than 1.6.0 version.

The Hello world sketch includes 2 header files – wire.h &  LiquidCrystal_I2C.h

A new object named lcd is instantiated using the constructor LiquidCrystal_I2C which takes parameters 0x27,2,1,0,4,5,6,7

Here 0x27 is the slave address of I2C backpack.

 

eg1

The next parameter 2 represents P2 pin of PCF8574 which is connected to EN of the LCD.

The parameter 1 is the P1 pin connected to R/W of LCD.

The parameter 0 is the P0 pin connected to RS of LCD.

4,5,6,7 are the 4 data pins connected to D4,D5,D6,D7 of LCD.

Inside setup , lcd.begin(16,2) ;   initializes the 16 x 2 LCD .Then the lcd.setBacklightPin(3,POSITIVE);

makes the P3 pin makes the P3 pin to control the backlight of LCD.

lcd.setBacklightPin(HIGH);  makes the P3 pin go High, which turns on the NPN transistor.This provides GND to the LED pin of LCD As the other LED pin is already connected to Vcc through the jumper , the LCD backlight glows.

lcd.home(); takes the cursor to 1st column , 1st Row of LCD.

lcd.print() prints the message.

lcd.setCursor(0,1); takes the cursor to 1st Column , 2nd Row. Make note that the counting starts from 0.

The following is the connection diagram between PCF8574 IC & the LCD .Once you solder the backpack on to LCD, these connections come into effect.

 

Image 2

 

 

Image 3

 

The next sketch is lcd_serialprint.

This code waits for you to type in message in the serial monitor of Arduino & then displays it on the LCD.

 

eg2

 

Next code shows the capability of connecting more than 1 device to the same I2C bus.

2 LCDs are connected to the same I2C bus A4,A5 of Arduino.External power source is used as Arduino can’t source power to both LCDds.

The backpack connected to 16 x2 LCD has no jumpers soldered to A0,A1,A2 .Hence the address is the default 0x 27.

jumper

The backpack connected to 20 x 4 LCD has A0 pin soldered, which makes the address 0x26.

By initiating the LCDs with their slave address, messages can be displayed on to the correct slave LCD.

eg3

 

 

VIDEO TUTORIAL :

 

 

 

cooltext753793315   cooltext753790696

ethernet1

 

Watch this support Video :

 

The Arduino board can be connected to the Internet using this Ethernet Shield which is based on the

WIZNET W5100 Ethernet chip . The Wiznet W5100 provides a network (IP) stack capable of both TCP and UDP.

WIZNET W5100 is the classic one , widely used by Arduino.CC .

WIZNET W5500 is used by Arduino.ORG & is referred as Ethernet shield 2.

We shall use the classic Ethernet shield W5100 in this post.

The shield has long pin headers to plug on the Arduino (UNO or MEGA). Other shields can be stacked on top of this board.There is an onboard micro-SD card slot, which can be used to store larger files.

The Ethernet Library is used to write sketches which connect to the internet using the shield. You need not download the library , as it is inbuilt in Arduino IDE.

The on-board micro SD card reader is accessible through the SD Library. Both the SD card reader & Ethernet board work on SPI bus .

The shield also includes a reset controller, to ensure that the W5100 Ethernet module is properly reset on power-up.

This board is different from the economy version using ENC28J60 device.The library for this ENC is different , ETHERSHIELD library hosted by NANODE project.Libraries are different for WIZNET board & ENC board.

Arduino communicates with both the W5100 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega.

On both boards, pin 10 is used to select the W5100 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5100 or the SD card, but it must be kept as an output or the SPI interface won’t work.

As the W5100 and SD card share the SPI bus, only one can be active at a time. If you’re not using one of the peripherals in your program, however, you’ll need to explicitly deselect it. To do this with the SD card, set pin 4 as an output and write a high to it. For the W5100, set digital pin 10 as a high output.

The shield provides a standard RJ45 Ethernet jack.A straight RJ45 cable is used to connect the shield to the Router.

A RESET  button is on the shield which resets both the W5100 and the Arduino board.

The shield contains a number of informational LEDs:

  • PWR: indicates that the board and shield are powered
  • LINK: indicates the presence of a network link and flashes when the shield transmits or receives data
  • FULLD: indicates that the network connection is full duplex
  • 100M: indicates the presence of a 100 Mb/s network connection (as opposed to 10 Mb/s)
  • RX: flashes when the shield receives data
  • TX: flashes when the shield sends data
  • COLL: flashes when network collisions are detected

Apart from these LED s , there are 2 more LEDs seen below the RJ45 jack.When Ethernet cable is inserted from a working Router , you can see these LEDs glowing below the RJ45 jack, one glows steadily & the other blinks as per data flow.

The examples in this section will all make use of the Arduino Ethernet Library.This library comes with Arduino, so no downloading or installing required

You can see the examples under File –> Examples –> ETHERNET

eth1

 

The Ethernet library allows the Arduino to turn into one of two Ethernet devices: a client or a server. Turning your Arduino into client allows you to connect to and request data from servers.

Another  example included with Arduino’s Ethernet library is WebServer.  This sketch sets up the Arduino as a server device, and hosts up a webpage whenever a client connects to it. The webpage is simple – it shows the status of the analog pins.

Open the WEBSERVER sketch

Webserver is a simple sketch which will display on a web browser, the data gathered from the analogue inputs. However don’t upload it yet, it needs a slight modification.

You need to specify the IP Address of the Ethernet shield – which is done inside the sketch. This is simple, go to the line:

IPAddress ip(192,168,1,177);

eth5

 

You can alter it to match your own setup. For example, in my home the router’s IP address is 192.168.1.1, the pc is assigned 192.168.1.6 , the tablet is assigned 192.168.1.3  , .. As the IP address is in the range 192.168.1.xxx , I just leave this to 192.168.1.177

You also have the opportunity to change your MAC address.As we use only one shield , we can leave this as it is.

To know the IP address , go to Control panel –> Network & Internet –> Network & Sharing Center

Click on your Internet connection .On the next window click Details to see the IPV4 address of your PC.

eth3

 

 

eth4

 

You can also use a IP SCANNER tool to know all the IP address allotted by your Router

http://www.advanced-ip-scanner.com/download.php?lng=en

eth7

 

Now upload the sketch to your Arduino.

Open your web bowser & type in the IP address 192.168.1.177:80 , the port address 80 is default for HTTP.Hence you need to type just the address 192.168.1.177 in the URL bar ,skipping the :80 part.

The web browser will query the ethernet shield, which will return the values from the analogue ports on the Arduino board.As such we’ve not connected anything to the Analog pins of Arduino, you get random values refreshed every second.

 

eth6

 

Remember , this is from a local browser & not from outside world.If you like to see the webserver from anywhere in the world , you need to PORT FORWARD your Static IP address to this local IP address 192.168.1.177 .This is set inside the Router’s configuration.

If your IP is not Static (mostly Dynamic which changes on every reboot) , you need to register with a service like www.noip.com

For more details of port forwarding , consider reading this post & video

https://alselectro.wordpress.com/2015/07/04/port-forwarding-part-2-solution/

https://www.youtube.com/watch?v=CyjWgqS8z2w

 

A simple sketch to print out the Gateway IP, IP of your Ethernet board, DNS is given below :

//<code>

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0x00, 0xC3, 0xA2, 0xE6, 0x3D, 0x57 };

void setup() {

Serial.begin(9600);
while (!Serial);
Serial.print(“Establishing network connection… “);

if (Ethernet.begin(mac) == 0) {
Serial.println(“FAILED!”);
}
else {
Serial.println(“OK!”);

Serial.print(“IP Address: “);
Serial.println(Ethernet.localIP());

Serial.print(“Default Gateway: “);
Serial.println(Ethernet.gatewayIP());

Serial.print(“Subnet Mask: “);
Serial.println(Ethernet.subnetMask());

Serial.print(“DNS Server: “);
Serial.println(Ethernet.dnsServerIP());
}
}

void loop() {
}

//</code>

 

Upload the sketch & open the Serial monitor to see the result.

ETH9

 

Example Sketch 2 : Display a web page from Arduino

 

———————————

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177); // change IP address according to your network
EthernetServer server(80);  // create a server at port 80
void setup()
{
Ethernet.begin(mac, ip);  // initialize Ethernet device
server.begin();           // start to listen for clients
}

void loop()
{
EthernetClient client = server.available();  // try to get client

if (client) {        // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {   // client data available to read
char c = client.read(); // read 1 byte (character) from client
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == ‘\n’ && currentLineIsBlank) {
// send a standard http response header
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“Connection: close”);
client.println();
// send web page
client.println(“<!DOCTYPE html>”);
client.println(“<html>”);
client.println(“<head>”);
client.println(“<title>Arduino Web Page</title>”);
client.println(“</head>”);
client.println(“<body>”);
client.println(“<h1>Hello from Arduino!</h1>”);
client.println(“<p>A web page from the Arduino server</p>”);
client.println(“</body>”);
client.println(“</html>”);
break;
}
// every line of text received from the client ends with \r\n
if (c == ‘\n’) {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != ‘\r’) {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1);      // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}
———————————————————

GSM BASED CONTROL BOARDS

This post introduces the GSM based project boards developed by NSK ELECTRONICS  & marketed by www.alselectro.com .

GSM BASED MOTOR CONTROL BOARD

GSM BASED RELAY CONTROL

GSM BASED SECURITY SYSTEM

The boards are designed to industry standards . Students can watch the videos to understand the functioning of the boards & can implement in their projects using Arduino , PIC , ARM  or 8051 controllers.

cooltext753793315_thumb.png      cooltext753790696.png

SIM908 – GSM ,GPRS & GPS All In One

This GPS/GPRS/GSM all-in-one board  uses an embedded SIM908 chip from SIMCOM.

Featuring an industry-standard interface and GPS function, the combination of both technologies allows goods, vehicles and people to be tracked seamlessly at any location and anytime with signal coverage.

Although the module is capable of dual UART , only a single UART   is used in this board.Through AT commands the GPS Engine is switched ON to get the NMEA sentence.GSM is controlled through same UART by AT commands.

Individual Antennas are provided , a STUB Antenna for GSM & an external Magnetic PATCH Antenna for the GPS.The position of Antennas is important , the one near the LM317 regulator is for GSM & the one in middle is for GPS.

sim908_11

The board must  be powered by an external adapter of 12v 1.5amps.Do not try to power this board from your Arduino or any uC board.

The board is best suited for Microcontrollers like 89S52 or PIC16F877A which have only single UART.

With SIM908 you can avail both GSM & GPS on a single UART.

To test the board with PC , we make use of a USB-UART board built on CP2102 Silicon Labs IC .The M908 board is connected to USB-UART board with a STAIGHT type of RS232 cable.

On connecting the USB cable to PC , a COM port is allotted ( which you can note down from the Device Manager) .This port number is used to communicate from PC to SIM9908 using a Terminal Software like PUTTY or HyperTerminal or TERATERM.

In this demo we shall use PUTTY on serial Baud Rate 9600.

Following snapshot shows the setup for testing.Note that the GPS Antenna should be left outside window .GPS gets a FIX immediately only when the Antenna faces SKY directly.Otherwise it takes more time to get a FIX.

STARTUP TESTING

Insert a valid SIM to the SIMHOLDER on the  back of the board.On powering up the SIM908 , the SIGNAL LED blinks fast initially & after short time it stops & then blinks slowly.

This indicates that the NETWORK is received.

Now from your mobile , dial the number of the SIM you’ve inserted on the SIM908 board.You get the Ring Back tone & the RING LED on the board glows.

WP_20150921_002

Note the COM Port allotted under the Device Manager & then open the PUTTY.

Select Serial , feed in the COM Port ( here its COM11) & baud rate as 9600.

Type in AT , the SIM908 module will respond with OK.

AT+CPIN?     returns the SIM STATUS . +CPIN: READY indicates SIM is inserted.

AT+CSQ       returns the SIGNAL QUALITY. 31 is the maximum level.

AT+COPS?    returns the SERVICE PROVIDER of your SIM.

AT+CGSN    gives the IMEI number of the SIM908 module which is Unique to every module.

gsm1

The default BAUD RATE is 9600.

If you wish to change baud , use the command AT+IPR

gsm5

To dial a number

ATD944xxxxx;        ATD followed by the number to be called & then a semicolon ; is a must.

ATH  to terminate the call

If you call the SIM number from another mobile , you get RING , RING  display.

ATA   To attend the call   & ATH to terminate the call.

If you want the caller ID to be displayed

AT+CLIP=1     enables caller ID.

GSM2

To send a message , first enable TEXT MODE ,

AT+CMGF=1

Now assign the target number to which message has to be sent

AT+CMGS=”944xxx”

A >    symbol appears , after which you’ve type the Message to be sent.

CTRL+Z has to be pressed to send the message .  0x1A is  the Hex code used to represent CTRL+Z within your C code.

gsm3

GPS AT COMMANDS

AT+CGPSPWR=1  enables GPS engine

AT+CGPSRST=0    COLD starts GPS.

AT+CGPSINF=0    returns a single NMEA sentence

GPS1

AT+CGPSSTATUS?     indicates whether GPS has got a FIX. If ERROR is the response , then relocate the GPS Antenna , wait for some time & then retry.

gps_3

AT+CGPSINF=32    returns the GPRMC NMEA sentence , from which you can parse the latitude,longitude

Generally the CGPSINF is assigned value  2 ( 2 power 1) to get GPGGA sentence

4  ( 2 power 2 ) to get GPGLL sentence

32 ( 2 power 5) to get GPRMC sentence.

gps_cgp1

gps_cgp2

Widely used value for CGPSINF is 32 which returns the GPRMC Sentence.

In your C code , look out for the value 32 & then count the occurrence of comma .After  second comma is the FIX data ( A means FIX , V means VOID- no fix)  ,after 3rd  comma is the longitude, etc..

GPS2

Watch the Support video for this post :

For availability of this Module contact :

LOGO2

cooltext753793315  cooltext753790696