Beta Users Needed - Teleduino - Control your Arduino via a web service

Teleduino is a project I've been working on since 2009. It's been through several iterations and re-writes, and I'm now looking for beta users to try out the service.

It requires users with an Arduino Uno (or equivalent), Ethernet Shield, and Arduino 1.0 IDE.

It comes packaged as a library, four example sketches, and includes a PHP class and sample PHP scripts to interact with your Arduino via a webservice.

Very minimal configuration is required to get your Arduino ready. It's a matter of inserting a unique API key, setting the network variables (or leave as default for DHCP).

On boot, the Arduino makes an outgoing connection to the Teleduino server, and holds a connection open waiting for instructions. Users can interact with their Arduino via a web service, which the included PHP class makes nice and easy.
There are several advantages with interfacing your Arduino with the outside world using this method:

  • No port forwarding required on your router
  • Outgoing connection is made on TCP port 53, which is already open on most firewalls (because it's also used for DNS).
  • No need to worry about putting an authentication mechanism on the Arduino, because the authentication is handled by the webservice.

You can perform the following tasks with your Arduino via the webservice:

  • Reset, ping, get uptime, get free memory.
  • Define pin modes, set digital outputs, set analog outputs, read digital inputs, read analog inputs, or read all inputs with a single API call.
  • Define up to 2 'banks' of shift registers. Each 'bank' can contain up to 32 cascaded shift registers, giving a total of 512 digital outputs.
  • Shift register outputs can be set, or merged, and expire times can be set on merges (you could set an output(s) high for X number of milliseconds)
  • Define, and read and write from serial port
  • Read and write from EEPROM
  • Define and position up to 6 servos
  • Set preset values for the above functions, which get set during boot. Preset values are stored in the first 160ish bytes of the EEPROM.

If this sort of thing is of interest to you, and you have a little bit of PHP experience (minimal experience needed), then get in touch and I can send you the packages required and a unique API key.

Thanks.

Hi Nathan,

sounds like a serious project, is there a website where we can read more about it?

Outgoing connection is made on TCP port 53, which is already open on most firewalls (because it's also used for DNS).

Will that interfere with my DNS requests / server?

Frankly, I don't like the reuse of the lower ports (special rights etc) ...

Hi Rob,

Thanks for your interest in the project.

I'm working on the website content at the moment. I wanted to get the core product ready first prior to the website. When it's released, it will be located at teleduino.com.

Will that interfere with my DNS requests / server?

I may have been a little ambiguous with my comment. The service running on the Teleduino server listens on port 53. Your outgoing connection connects to port 53, but your local port will be whatever is automatically allocated. This is no different to accessing multiple sites across multiple servers that all listen on port 80.
That being said, if you'd rather not use port 53, the server also listens on port 5353. It's a matter of changing a variable in the head of the Arduino sketch. The server can be configured to listen on other ports as well, if there is enough interest.

Thanks again.

Ok I will be one of your beta users but may I ask how much we get paid? $) lol

Hi 100Grand,

Many thanks for the interest. I'll send you a PM with further information.

Your reimbursement will be in the form of being able to use a neat product! :slight_smile:

Many thanks to the others who have PMed me as well. The feedback received thus far is excellent.

@100Grand,

Didn't you indicate here you are some kind of equipment-less student here looking for Robot equipment?

@CrossRoads, I dont have and arduino I thought this was online testing like I go to a web link or ip and test it out, I dont have an arduino but am looking forward to getting one, I just dont have the money to get one.

Hi all,

Just thought I'd post an update that the full API has now been released which means that the PHP class is no longer a requirement for interfacing with the webservice. No PHP experience is needed.

The new API is more verbose and has some documentation explaining request parameters, etc.

If you are interested in trying out the service as a beta user, please PM me.

An extended thanks to the people who have contacted me already.

Hi
I've signed up for this too, looks great and works well. I'm using it at the moment with interface API to chartbeat and pingdom for user and visitor counts. I've added in some extra code that pushes the key id to my own server on boot up so that I know when a device comes online. Seem to get a lot of these arduino reset/reboot with the ethernet. They certainly dont seem to stay up and running 24/7

Hi mr_roboto,

Thanks for trying it out!

Interesting that you're experiencing reboots. Can I ask how frequent they are occurring? Typically devices would stay online for days at a time - it all depends on how reliable your internet connection is.

If you've added some further code, then it's possible that the device is running out of memory? The other possibility is that any attached devices/sensors are drawing too much current and causing the device to reboot? Send me a PM if you would like me to assist you with troubleshooting. If you include your API key in the PM (don't post it in the public forum) then I can check the server logs to see if that provides any clues.

On a side note, I have published some tutorials on Instructables. People can now automatically generate API keys, and there are some example projects posted. Simply search for 'Teleduino' at instructables.com.

Thanks!

Hi
well so far i'm running an arduino R3 with onboard ethernet. Seems to run for hours sometimes without problem, sometimes get patches of reboots. Current isnt too bad as I'm only running a couple of leds and a serial LED display with a decent external supply. I ran this previously before finding your teleduino and noted that it was rebooting/crashing regularly anyway, and was 10x worse when the LCD libray was installed. So far its a lot lot better with teleduino :slight_smile: I overcame previous crashes before with the watchdog timer set at 8s which pretty much made it look like it worked fine.

Tests are currently halted today though, I ran an ardafruit internet printer on a 12v PSU that backfried my port USB on the laptop, the programming cable and the arduino, oops. That was the point I realised they had bypassed the onboard regulator :slight_smile:

Anyway, I've got another two R3's on order so should be back online by tuesday.

I'm running some Cron's at the moment that update the arduino in it's Teleduino Ethernet Client Proxy mode. I just wondered if I have a selector switch onboard and set an input I'm guessing I would have to wait till the next poll before being able to read any change ?

Will be having a play with the servo mode on wednesday and working out a way to select different serial devices. When i'm back up will post some pics.

You should be commended on this, its a brilliant solution.

mr_roboto,

Many thanks for the kind words, and for the positive feedback.

With a well configured device it shouldn't matter too much about the occasional reboots. You can set preset values for most of the functions, that get set on boot. For example, pinModes, serial port baud, servos, etc etc. You can set the presets for your device by using the (currently ugly, but working well!) interface at http://www.teleduino.org/tools/manage_presets.php?k={key} (replace {key} with your API key).

You're right about the inputs values. They will be picked up at the next poll. Triggers/hooks haven't been implemented at this stage of the project as I wanted to see how it gets used as it currently stands and work forward from user feedback.

The servos are awesome to play with. I'd highly recommend using an external power source for the servos, as you'll most likely experience reboots if you're powering the servos as the Teleduino from the USB port.

Thanks again!

Back with a new batch of Arduino! Also playing with the PWM outputs, I have a voltmeter that I am using, but it seems that the PWM outputs are reset when the software checks for new settings?
Anyway, below is likkle box #1 that provides a live display of various web stats depending on what is selected in the users area of the server, plus a few LED's for other bits and pieces (server status, new blog comments etc). Also have some external add-ons such as glowballs, police lamp and voltmeter for "happiness" readings.

Looks like a really neat project! Thanks for posting the pic.
I'm a little unsure about what you mean about the PWM outputs resetting? The only time they would reset would be if the Arduino rebooted, in which case the output would be set to the default value defined in the EEPROM. If you're using a voltmeter to measure the output, you'll find that it always reads approximately 5V because it's not a variable voltage output, it's just switching between 0v and 5v at X number of hertz.

Hi,
yes ignore that, LOL

Not sure what was happening before.
I now have a 5V voltmeter on Pin 9, and using

$counter = 127;
$result = $Teleduino328->setPwmOutput($pin, $counter);

and its showing the result quite nicely.

$counter is in fact a % deviation on the vistors currently on the site now, compared to 24hrs ago :slight_smile:

have you see the hearbeat glow that adafruit use on their printer? Its a nice alternative to the harsh blink of the status light.

The heartbeat does look neat on the Adafruit Printer. If you like, you could modify the part of the Teleduino library that is used for the 'ping' method (lines 232 - 249 of version 328-0.6.5). You'll need to select a different pin for the status LED in the header part of the sketch, one that supports PWM. Just make sure that the method doesn't take too long to execute because it ties up the Arduino and would cause other instructions to get queued (the current ping method only delays for 10ms).

The reason behind using pin 8 for the status LED is to keep the PWM outputs available for projects (otherwise it would have made sense to use pin 9, so that it's physically next to the 4 pins that are used by the Ethernet shield).

Thanks!