Monday 6 April 2015

ESP8266 wifi module testing with python on local server

ESP8266 wifi module.

As most of you would know is getting famous for its small size, easy to interface, and low cost availability of wifi for internet of things projects. :)

Well I bought this module in form of esp-07. They are all same expect in pin numbers or gpio available out side.

This are powered with 3.3v supply and also interface at 3.3v i/o .

To keep it simple people can get other links how to connect ESP to arduino or to pc directly.
I wanted to test this module to connect to my locally created server, So first I thought I would have to go to linux and create a tcp/ip code with socket API to test, sent from serial over wifi from module and receive on wifi of laptop and print on computer screen by this code. But Python saved me. (not an animal its a language easy to use and learn, learn it, it will help you easy your efforts to test things)


So this was my set up.

I try found a TCP server code in python and modified it to just print what ever it receives from ESP's serial input.

So I opened a tcp server on laptop A with its WLAN IP address and some port number you can use any but don't use dedicated port numbers such as 80 as they are used by other applications on you pc.
once you are done on server side.

setup you ESP module to connect to serial port monitor and connect it with AT commands to you wifi router or access point
now note your laptop A's IP address you used to setup you server.

as you know to connect to the server with TCP, AT command is.
AT+CIPSTART

so as it is shown in espressif wiki for all AT commands 
to connect to server:

AT+CIPSTART="TCP","xxx.xxx.xxx.xxx",xxx

here xxx.xxx.xxx.xxx all xxx are numbers  separated by dot(.)
and xxx is port number you assigned the server.

Once if its connects you get connect response from ESP on serial monitor or you get error on some problem.

if you are connected to Server that is it is connected then, to send data to server requires you to use 
AT command 

AT+CIPSEND

look at how to use it from this link. link to all at commands

here is a screen shot to my test although I made few mistakes giving commands still I have highlight correct once.

Enjoy your time with this new module. I will keep posting more things on it. Currently looking how to get to parse.com with this thing.It will open up new dimensions for me.

also this library could help you.arduin_ESP8266 library

Saturday 8 November 2014

From AVR Atmega's to 8051 programming controllers

8051 Microcontroller Programming 
This is to those people who have knowledge of AVR controllers but suddenly like me have to work with some new SoC like cc2540 based on 8051.

Any how the first step to work with a microcontrollers  is to have a working evaluation board or setup ready on bread board or to built a PCB and stuff. If you have it and all softwares setup read then you can begin from here (if you don't have it please people follow the guide lines provided by vendors I know it take time to go through those stuff but believe me it will save your device from damage and other issues ).

Ok, so this is to just check out how will u make sure your board or setup works first thing I think is to blink a LED or to access a port on your new  controller.
 Those familiar with AVR's its like
                            1) first set the directing of pin based on number of pin  and its position(how many LEDs   and at which pin ,Remember not all pins can be used as I/O pins)
                            2) Rise Pin to digital HIGH by writing one to PIN (Note3 : making PIN HIGH?LOW to turn LED on Depends on the way LED is connected to PIN)
                            3) Put a delay or do some computation (just to keep CPU occupied)
                            4) Low the Pin to digital LOW by writing zero to PIN(Note3)
                            5)Just as in step 3 put a delay( this is because CPU's are fast and when u will not put this delay u won't see LED off).
                            6) keep repeating this steps again.
So for avr guys had to do

void main()      //AVR code looks like
{
int i;
DDRB=0x01; //setting first pin to output pin (step 1)
do{
       PORTB=0x01; // step 2
        for(i=0;i<20000;i++) step 3
           {
            //do nothing
           }
       PORTB=0x00; //step 4

        for(i=0;i<20000;i++)   // step 5
           {
            //do nothing
           }

    }while(1) //step 6
}


now 

Wednesday 11 December 2013

Sed utility

Sed quick learn for general editing and use.
This is just a quick reference form myself and others who don't use it regularly.

Sed is one more editing utility inspired from ed command. Script ed is what it basically is.
ed edits a line at a time while sed edits all line in general it is a global.
sed [-e] 'instruction' file
 were -e is option is important when you are suppling multiple instruction.
 
example let a file contain a list of address and cities name in short form
then following:
sed 's/MA/Massachusetts/' list
where list is file containing address list.
In this as you can see that the instruction is   are similar to that you give in ed.
 but you see that you don't have to provide address(not the addresses in list it mean position or line number in the file) to lines as in ed. It simply traverses to all lines one by one. also it will print out the output.

two ways to specify multiple instruction
1st: Using a ';'

like
 sed 's/MA/Massachusatts/ ; s/PA/Pennsylvania/ ' list

2nd: Using -e

sed -e 's/MA/Massachusatts/' -e 's/PA/Pennsylvania/ ' list

or 
3rd: using multiline entery capability

sed '
s/MA/Massachusetts/
s/PA/Pennsylvania/' list

Ok thats it to entering commands

Now how to use script file as an input to sed?
script file can be like this
suppose  sedscr is a script file then
cat sedscr
s/MA/Massachusetts/
s/PA/Pennsylvania/

 and you can use it as

sed -f sedscr list

as sed directly print it to default output or terminal one can rather redirect it and store the modified out put in a file.
as
 sed -f sedscr list > newlist

you can suppress the printing on screen of all the line by using '-n' option
as
sed -n -e 's/MA/Massachusetts/' list
this will not give or display any out put
if you want to view just the modified lines use 'p' as in ed command
as
sed -n -e 's/MA/Massachusetts/p' list

Thats it for sed
look for further learning on :http://www.grymoire.com/Unix/Sed.html

Ed, the command line editor quick lookup

Ed Command line editor.

Ed is a unix command line editing utility which is interesting as it leads to Grep awk and sed commands to be understood better.
Ed is easier to understand and use.This not a tutorial it for quick lookup for me and those who have not used if from long time and need a little revision. :D enjoy.

consider you are want to edit a file with thousands of words.
 open up the terminal

at prompt type

>ed filename.txt 

nothing will be shown except number of characters in the file.
This command works on just a line at a time.
if you type 'p' and press enter

You will see last line to be printed. Because the ed was pointing at last line. 'p' stands for print.

Entering any number will point to that line number.

 Entering 'd' will delete the line ed is pointing.

rather than moving to a line by line number and then editing .you can specify a regular expression as an address to any particular line containing that regular expression.

suppose u want to delete a line having a word 'regular'  in that line.
then

/regular/d
will delete the line having regular. but this will only delete the line it will encounter the first time containing regular expression

suppose if content of file are,

asdfg
wer
asdfg
rew
asdfg
ewret

and we have processing with ed
the following commands

>3
asdfg
 >/asdfg/d
w
 will save the file as

asdfg
wer
asdfg
rew
ewret

deletion will occur to at next asdfg

g/regular/d
will delete all the lines containing 'regular' word

thats about deletion.

substituting text requires 's'

[address]s/pattern/replacement/flag

where a word pattern will be replaced with replacement. flag can be 'g' for global that is if a g is placed then all the patterns in line will be replaced by replacement.
s/regular/complex/g
above command changes all occurrences on the current line.

address should be specified for this command to act upon more than specific line
/regular/s/regular/complex/g

the above line affects the first line that matches the regular(or address specified).
g/regular/s/regular/complex/g


The family of Unix command Grep is derived from global command Ed as: G/re/p.

 One can write script of edit place them in a separate file and directing them as input to the line editor. For instance, if a series of commands were put in a file named ed-script, following command executes the script:
ed test< ed-script

further you can look at:http://unixhelp.ed.ac.uk/CGI/man-cgi?ed

CC2540 UART 0 alt1 setup

CC2540 UART 0 alt1 setup Instead of USB for CC2540 USB Dongle
this is setup for testing if the Uart works or not I have not connected arduino i have taken out chip and just used the board to make a UART bridge to test it with Btools.

I am working about 2 Months on a project that is under a professor. Project is a from NIF(National Innovation Foundation).
It is about same as a recently famous Tile Device (lost found or object locator) I call it object locator.
TI is based on similar technology developed based on Bluetooth that is BLE (Bluetooth Low Energy) or BLE 4.0
TI(texas Instruments ) have developed an SoC based on BLE . I am using CC2540 for similar application to Tile.
First the thing I wanted was to setup Dongle to UART so  Icould connect it to UART of Arduino as to make a independent Device from computer. In the Btool I saw the Communication (Rx/Tx Dump) so I had to first do bridging to a FTDI and setup dongle to uart connected to bridge and then test it to BTOOL.
 I wanted to use the same project HosttestRelease but wanted to use dongle as a network processor to Arduino to easily prototype the device to show it to the NIF.

So I had a PC setup for the Embedded Workbench after I used the software in my laptop(to TI people can the ble stack be used with other open source IDE's??) . In the project HostTestRelease,
In HAL>Target>CC2540USB>Config>hal_board_config.h
Line No 336 will be a #defined HAL_UART_ISR 0
set it to 1
just in next line #defined HAL_UART_USB 1
set it to 0

Now I wanted to not have a UART flow control or CTS and RTS cause I wanted to use it with arduino I don't want to waste pins of arduino's

for switching CTS and RTS pin off
go to NPI>npi.h file in that at line 77
there is a #defined NPI_UART_FC TRUE
setting all this will get your UART 0 to work on Dongle's I/O port's First and second pins P0_2(Rx) & P0_3(Tx)

There is one more setting to set the priority to UART 0 but I am not remembering where , I was something that I had to set to 0x00 to use UART 0 and that thing was not defined in the file it was in ISR's Method and was shown as error while compiling if in case u get it please post it in comments and I hope this post will help others cause I was also having trouble for 2 days because of no proper guidance like that in AVR atmel case ... Thank you all.


Sunday 7 July 2013

Time : the trouble with clocks running


Taking Clocks

whats time in your clock?...is it correct ? well if you have set it from some clock is your source correct?
There is world problem of clocks running different time with in a room.Difference may vary from mins to half hour.People some time do it to be early at there destination or wake up early .I do that too. So how do you get your watch a correct time.
You may think of matching you time to that of clock at railway station or at airplane .But what if your clock is losing time. you will lose it too unknowing. In my collage Profs don't let you sit in lectures if you are late as the clock timings vary in ever-bodies clock .
One day in class of Embedded Hardware Design Prof ask how would you keep all clock in all rooms of collage in sync? Simple solution was to appoint a person with a clock and asking him to reset all clock to the clock in his hand.
This can be a solution that can help in small places and if labor is cheap .Well as it was an embedded System class Prof's target was an answer in embedded System terms.One of boy suggested that all clocks update time from a single server ,but that could raise the price of clock that has ability to connect to Internet.Nobody had a perfect answer.
Many days Past and I was reading about cognitive radios and the cooperative model of communication and was into few of this concepts .Last night, suddenly I saw clocks talking and  in my ears when I was switching of my ears with fingers pushed in. I heard tick tick tick... although later I found out that it was my heart beat I heard of..stupid me. But it did spark me an Idea.
In past there use to be  a clock signal radio station  on a particular frequency when you tune to it you can listen to the sound of clock.
well anyways , What I though was an experiment ,
consider clock A is present and another clock B comes (assuming clocks can talk to each other) to A, asking for time so that it can reset itself .But how should B trust that A is at correct time?
You can go on thinking over this topics - cognitive radios,game theory, swarm intelligence and distributed computing to find some solutions.



Orignally written about 5 months ago. 

Time and Programing issues with it

Time and Issues with it.
I have worked with RTC (and arduino for a real life project )and some programming problems related to time.
I want to keep it noted so next time dont fall in this trouble.
This problems are mostly while comparing two time instances.

> Time I generally denote as hh:mm:ss ,also consider it 24 hours scale.
24th hour is 00:00:00.

> An hour starts as 01:00:00 and end at 01:59:59 thus an Interval is measured this way. Adding time such as adding 2:15 hours to time 1:47 as

new min=(15+47)%60 where % is module and floor of ((15+45)/60) is added to hour as 2+1+floor((15+45)/60).

> subtracting time such as 3:12 minus 2:31 is like
  subtract minutes as
if (12 <31),
 hour -1(i.e 3 - 1)
 and  than min + 60, (i.e 12+60)
and then subtracting minutes as 72-31=41 min and then subtracting hours as 2 - 2 = 0.
that gives 00:41 answer for the subtraction
I will still put others, I know more issues but I don't remembered most of those I dugout my previous code and put those too here soon.

 I was motivated by  Question on time intervals on Amazon Interview street challenge https://amazon.interviewstreet.com/challenges/dashboard/#problem/4fd651016cd04