Shop OBEX P1 Docs P2 Docs Learn Events
Using the Web to control servo at home ideas — Parallax Forums

Using the Web to control servo at home ideas

dingobatsdingobats Posts: 6
edited 2012-02-06 14:39 in Propeller 1
Hello everyone,
I want to be able to control say 4 servos at home. I would visit a webpage (that I can code myself) that will have 4 buttons to control each servos.
How can I achieve this? I looked into Spinneret, but I am relatively new to these kinds of things so I would like to see what are better for my case.
I've also looked in to the mini-usb p8x32a, but that would required the use of a computer. I would like to not use a computer if possible.

I guess I just want to be able to have some Servos interact with a webpage depending on what gets clicked.
Is this possible?

Thanks in advance

Comments

  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-02-04 17:31
    If you don't want to use a computer, then a Spinerette is is one option. I'm not sure what you mean by "mini-usb p8x32a"? Is this the QuickStart board? The QS by itself wont be able to do this. The Spinerette could.

    If you don't use the Spinerette, you'll need something else with Ethernet capability.
  • dingobatsdingobats Posts: 6
    edited 2012-02-04 17:38
    Hi Duane,
    yes that is the quickstart board.

    How difficult is it to achieve this with the Spinerete? I can't find much information or demonstrations online for using this in the way that I am thinking of.
  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-02-04 18:18
    dingobats wrote: »
    Hi Duane,
    yes that is the quickstart board.

    How difficult is it to achieve this with the Spinerete? I can't find much information or demonstrations online for using this in the way that I am thinking of.

    The hard part will be setting up the Spinerette to use from the Internet. When I tried to get my Spinerette up and running, I was never able to get "port forwarding" to work. I had a really bad internet connection at the time and it turned out my modem was going bad so I might be able to get it to work now.

    Once you can interact with the Spinerette over the internet, the rest should be very hard. Driving a servo with a Propeller is pretty easy. I have a video of a QuickStart board driving 32 servos here. There's a relatively simple servo demo with the demo folder of the Propeller Tool's library. I made an even simplier demo and posted it to my QuickStart servo tester thread.

    You'll want to look around in the Spinerette forum to see how to set up port forwarding and to learn the other stuff about using the Spinerette from the internet.
  • dingobatsdingobats Posts: 6
    edited 2012-02-04 18:52
    Hi Duane,
    So have you been working with Spinerette? I searched around and found SitePlayer. http://netmedia.com/siteplayer/webserver/spk1.html .have you heard about this?
  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-02-04 19:00
    I haven't heard about SitePlayer before.

    There's a lot of good information about the Spinerette in the Spinerette forum. Make sure and check the "stickies" at the top of the forum listings.
  • mojorizingmojorizing Posts: 249
    edited 2012-02-04 19:14
    I use siteplayer modules. The pro's are that it's easy to do the html , it's relatively cheap, and you can upload new html to it to change the web page remotely. The con's are that there's no support, and you'll need a post-processor to do all the servo handling. There's a yahoo group that you can join, though it's not very active.
  • mojorizingmojorizing Posts: 249
    edited 2012-02-04 19:27
    I almost forgot...one of my siteplayer projects is public, and it was an entrant in an old parallax SX contests

    http://www.parallax.com/tabid/683/Default.aspx

    I now live on Kauai and haven't made a visit back to the camera in years......it's like the mars rover, just sitting there all by it's lonesome unloved, probably ready to fall off the cliff. The pan feature no longer works...probably a broken wire.

    you'll have to accept an activex to view the video, but the URL is http://75.111.49.196:3398/
  • Mike GMike G Posts: 2,702
    edited 2012-02-05 07:06
    dingobats,

    The Spinneret is up to the task. Here's a simple IO example.
    http://www.agaverobotics.com/spinneret/controlpanel.htm

    Basics for interacting with the Spinneret (web page).
    http://spinneret.servebeer.com:5000/

    You can do the same with the Quick Start board, the only difference is a PC would host the web site or route traffic to the Quick Start via the serial port.
  • ratronicratronic Posts: 1,451
    edited 2012-02-05 07:57
    Mike that is so cool! You may have convinced me into getting a Spinneret now.
  • T ChapT Chap Posts: 4,198
    edited 2012-02-05 08:54
    Duane Degn wrote: »
    The hard part will be setting up the Spinerette to use from the Internet. When I tried to get my Spinerette up and running, I was never able to get "port forwarding" to work. I had a really bad internet connection at the time and it turned out my modem was going bad so I might be able to get it to work now.
    .

    When you can't do port forwarding for whatever reason, then if you can get away with a little bit of latency, set up a MYSQL DB on some webserver, add some fields for commands, have the Spinerette read the DB(can be done easily via a webpage coded with PHP that is parked on another webserver). The Spinerette reads the DB at some rate. Create another web page that lives on a webserver, use PHP very easily on it to add some buttons or text input fields, which will update the database with data or commands. The database is acting as an intermediary for the Spinerette and some web page to transfer data. Likewise, the Spinerette can update the database with a response, so the command input webpage can get status from the Spinerette indirectly as well. I have examples of this if needed.
  • Mike GMike G Posts: 2,702
    edited 2012-02-05 09:10
    T Chap, good point. I've done something similar for controlling robotic arm sequencing.

    Fair warning, you have to be prepared for the amount of traffic involved in polling then web server. You don't want a big bill from your hosting service.

    @ratronic, thanks... Plus you can run a Dynamixel network rather easily over the web ;)
  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-02-05 09:55
    T Chap wrote: »
    When you can't do port forwarding for whatever reason, then if you can get away with a little bit of latency, set up a MYSQL DB on some webserver, add some fields for commands, have the Spinerette read the DB(can be done easily via a webpage coded with PHP that is parked on another webserver). The Spinerette reads the DB at some rate. Create another web page that lives on a webserver, use PHP very easily on it to add some buttons or text input fields, which will update the database with data or commands. The database is acting as an intermediary for the Spinerette and some web page to transfer data. Likewise, the Spinerette can update the database with a response, so the command input webpage can get status from the Spinerette indirectly as well. I have examples of this if needed.

    T Chap,

    Thank you for the information. I haven't tried to set up port forwarding since I purchased a new DSL modem.

    If I need to use a websever, so have any suggestions on who to use? Are there any free alternatives?
  • T ChapT Chap Posts: 4,198
    edited 2012-02-05 11:02
    I always go with a deluxe hosting account with Godaddy. With this account, you can add as many domains to it as you want for around 10.00 each. It is a minimal effort to create a mysqyl database and add fields. So you need several ingredients to do what I suggest. First, I do not bother trying to write code on the Prop for http protocol, that gets to be a headache for me, especially for things like accessing a database. Instead, PHP is very easy to figure out, and create little pages that do all the real http work and just echo the responses. I will give you an example of a PHP page that you can pass the database address, username, and password. The mysql database can be on the same server or on any other server. Finding a free webserver may be possible to park the pages, but parking a database for free.. I am not sure if that exists, you can google free mysql database, free hosting etc. Who cares if they banners etc, no one is ever going to see the page but you probably. Most of the sites I have used are cheap, domains can be around 10 a year, hosting for a single site can be around 10 also. Finding a service with a quick install mysql db will make things easier. It doesn't get much easier than Godaddy IMO.

    This is a page that will read a database and echo what you need back. This could be one or many values returned.

    You would need to modify this to your needs. PHP is quite easy compared to Spin, so it would be no problem to modify the code here. Server is the address to find the db. DBU is the username and DBP is the password.
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <title>Read DB</title>
    </head>
    <body>
    <br>
    <?php $con = mysql_connect($_REQUEST[SERVER],$_REQUEST[DBU],$_REQUEST[DBP]);
    if (!$con)
    // See if the connection to the DB was made
    if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }
    if ($con)
    {
    echo "CONNECTED TO DB";
    } 
    mysql_select_db($_REQUEST[DBU], $con);
    $result = mysql_query("SELECT * FROM $_REQUEST[TABLE]");
    while($row = mysql_fetch_array($result))
    {  
    echo "DVR=";
    echo $row['DVR']
    WHERE ID='$_REQUEST[ID]';
    echo "DVON=";
    echo $row['DVON']
    WHERE ID='$_REQUEST[ID]';
    echo "DVOFF=";
    echo $row['DVOFF']
    WHERE ID='$_REQUEST[ID]';
    echo "BASEIP=";
    echo $row['BASEIP']
    WHERE ID='$_REQUEST[ID]';
    echo "SDOWN=";
    echo $row['SDOWN']
    WHERE ID='$_REQUEST[ID]';
    echo "CLEAR=";
    echo $row['CLEAR']
    WHERE ID='$_REQUEST[ID]';
    echo "RSTTIMER=";
    echo $row['RSTTIMER']
    WHERE ID='$_REQUEST[ID]';
    echo "DAY=";
    echo $row['DAY']
    WHERE ID='$_REQUEST[ID]';
    echo "HOUR=";
    echo $row['HOUR']
    WHERE ID='$_REQUEST[ID]';
    echo "MINUTE=";
    echo $row['MINUTE']
    WHERE ID='$_REQUEST[ID]';
    echo "CLOSED"   .  mysql_error();
    }
    mysql_close($con);
    ?>
    <br>
    <br>
    </body>
    </html>
    

    This is the code I used on the Prop to access the ReadDB page. It is not coded for the Spinerette, but rather for a wifi device via UART with the 4 port object( port 1 is for serial terminal debug, port 2 is the wifi device commands)
    PUB ReadDB
        ser.str(1, string("READ DB"))
        ser.tx(1, CR)
        beep(19, 2500, 100)
        w(20_000_000)   '   wait
        beep(19, 2500, 100)
        w(20_000_000)    
        beep(19, 2500, 100)
        ex   'exit if it was open from previous
        ex
        ser.str(1, string("---"))     'debug
        ser.str(2, string("$$$"))  ' enter command mode on wifi
        Viewreply    
        ser.str(2, string("open xxxxxxxxxx.com 80"))     '  your webserver domain name where the page is loaded
        ser.tx(2, CR) 
        Viewreply
        Viewreply
    
        ser.str(2, string("GET /readdb.php?"))     ' open the web page shown above
        ser.str(2, string("TABLE=table1"))   'DB table name    '  provide the table name in the db
        ser.str(2, string("&ID=1"))    'system ID      in case of multiple systems using same db
        ser.str(2, string("&SERVER=xxxxxx.db.xxxxxxxxxx.xxxxxxxxxresource.com"))    '' DB server
        ser.str(2, string("&DBU=xxxxxxxx"))      ''DB username
        ser.str(2, string("&DBP=xxxxxxxxx"))     'DB password
        ser.str(2, string(" HTTP/1.1"))   'http GET terminator
        ser.tx(2, CR)
        ser.tx(2, LF)
        ser.str(2, string("Host: xxxxxxxxx.com"))  
        ser.tx(2, LF)   ' two LF required
        ser.tx(2, LF)  
    
        RecWifiData    'after sending the command to open the page, now read whatever comes back
        ParseDBReply   'disect and act on commands    
    


    The last ingredient is the page that is used to update the DB remotely by the user. This would mean changing a value on the database, this could be as simple as making a value become a 1 if you want to turn on an LED, or make the value 0 to turn it off. However, If the command is not desired to repeat over and over, you should add a field that I call a Confirmation Flag that the Spinerette can then toggle OFF after it successfully executes the command. For example.


    1. A page with some buttons on it can be loaded by a user, pressing a button sends an update to the database and modifies a field with a command value. It also sets the CONFIRM flag to 1 so that the Spinerette will know there is data available for use. Sort of a flow control.
    2. Spinerette reads DB and checks to see if the Confirm Flag has been to 1 = DATA READY( this could be as simple as the remote page setting the flag to a 1 if there was new data or commands added to the DB.
    3. If the Flag is a 1, meaning new data or commands posted, the Spinerret will then parse the commands and do what it should do based on the command
    4. After doing the command, the Spinerette accesses a page I call CONFIRM.php. This page will then reset the Confirm flag to a 0 so that A. The remote user can know if the command has been executed, and B. The Spinerette does not keep repeating the same command over and over again.
    5. A Status page can be set up that reads the CONFIRM flag and shows the status of the command. Continuous refreshing will eventually show the flag set back to 0, meaning the command was executed.
  • Duane DegnDuane Degn Posts: 10,588
    edited 2012-02-05 15:40
    T Chap,

    Thanks for all the information. This is definitely something I what to do some day.

    I'll probably use Godaddy when I need a online database server.

    Thanks again.



    @Mojorizing, Very cool camera setup.
  • dingobatsdingobats Posts: 6
    edited 2012-02-05 22:05
    Thanks Mike,
    That webpage about lighting up the led was awsome. I think it may be just want I wanted.
    Do you be any chance know how many IO's are on the board? What if I wanted to light up 10 led how would I go about this?
  • Mike GMike G Posts: 2,702
    edited 2012-02-06 04:44
    There's 6 free IO. Please see the Spinneret page for product details.

    However, a counter or serial to parallel IC will handle 10 LEDs. There are also I2C pin extenders.
  • dingobatsdingobats Posts: 6
    edited 2012-02-06 08:44
    Hey Mike,
    I just realized that you were the 1st place winner of the contest. Late congratulations!

    Would your led tutorial allow me to utilize all 6 of the IO?
  • Mike GMike G Posts: 2,702
    edited 2012-02-06 13:35
    Would your led tutorial allow me to utilize all 6 of the IO?

    The tutorial has IO examples but is more geared toward the HTTP protocol. The tutorial talks about passing data to the Spinneret, executing custom logic,and parsing response XML. The Propeller manual better explains how to utilize Propeller IO.
  • dingobatsdingobats Posts: 6
    edited 2012-02-06 14:28
    Hi Mike,
    I hope you don't mind me asking you some very basic questions on Spinerete that you've probably answered many times.
    What I got from your tutorial is this:

    1. Spinerete sets up a web server.
    2. HTML sends a query to the dispatcher
    3. The dispatcher decides which IO to turn on/off

    Is this correct?
  • Mike GMike G Posts: 2,702
    edited 2012-02-06 14:39
    More like...

    HTTP (socket) request
    Spinneret web server parses the request header
    The Dispatcher determines if the request is static or dynamic and routes the logic accordingly
    Static requests are files resources on the SD card.
    Dynamic requests are usually custom code blocks that perform a task like lighting an LED.
    Static and Dynamic requests always return a response.
Sign In or Register to comment.