I have a working library for initializing AT-command compatible modems for TCP/IP over cellular.
Protocols: TCP and UDP (both work)
Mode: Transparent Bridge
Rate: 57600 baud
GCS tested: MP and QGCS
HW: APM1 tested, (APM2 testing soon)
Modems Tested: DroneCell (SIM900D module) and Arduino GSM Shield (SIM900 module)
UPDATE: Here is the first attempt at a library. It is a patch against the most recent commit (as of today), and will apply to ArduCopter *only* (not ArduPlane yet, though it should be trivial to add to ArduPlane).
The library will send init strings to the modem to establish a transparent connection. The SIM-specific and network-specific parameters (like destination IP), have to be added to the code for now (there is no configuration interface yet).
The patch creates a directory and two files, under libraries/Cellular_Modem and adds a few lines to ArduCopter.pde and system.pde to call the library on startup.
DISCLAIMER: This is early ALPHA. If it works for you it is a miracle!
updated again with some status checking code:
and as a hex file, in case you cannot compile code but want to test:
Latest code, is as a series of three patches on the current code from git. Once installed, change the values in Cellular_Modem.h to match your SIM card and IP address, compile and run on the APM1.
The code will initialize the modem, set up a TCP or UDP connection to the IP address/port you specified and start sending and receiving telemetry at 57600 baud. It takes about a minute from groundstart before you see packets flowing over the Internet.
There's about 1-2 second latency, but no packet loss.
Recently found this http://www.cooking-hacks.com/index.php/documentation/tutorials/ardu...
Could this possible be a new way of thinking? as it includes a camera on the shield itself, and is arduino compatible.
And best of all, the first 3G shield...
The 3G cellular data shield is compatible with AT-command set and therefore may work with the new experimental Cellular Modem library. The key commands for setting up TCP and UDP are the same.
Let me know if you would like to test it for telemetry.
As for video, that will be a follow on goal, but it is too early yet.
DroneCell has arrived in SATX, so I'm ready for testing.
Andreas, thanks for the patch I would like to try it out with my Arduino Sim900 GSM shield. Unfortunately I'm a bit new with GIT and was wondering if you could point me to somewhere to find out how to convert your patch to code? Earlier the year I started experimenting with connecting an Arduino UNO with the GSM shield to the APM1 through a I2C connection. The setup was chosen to free the APM1 from delays while communicating with the GSM shield. I assume you connect the GSM shield directly to an APM1 serial port?
Andreas, have you tried to read/write many waypoints throught GPRS connection?
I used Siemens TC65 modem for GPRS connection and have good connection at 4800 baud rate slightly decreased some of the data rates in Mission Planner. If I choose higher rate the modem may hang up in several minutes.
But when I try to write or read waypoints using GPRS I usually get an time out error or sometimes other errors. Also reading WP is more faulty than writing. Does anybody faced the same problem?
It sounds great with a library!
I was also developing one. Maybe you can help me decide whether I should continue that work, if you can tell me:
To me, the most important is prevention of deadlocks.
Hi, yes reading and writing WPs in Mission Planner seems very very sensitive. I have to try several times over before each time it works, even if the link quality meter thing reads 100%. An XBee link has to be quite good too. The USB cable always works.
I have some code ready for testing.
It works with the SIM900(D) GSM unit (which is on the DroneCell) and currently probably only with that. It does not use transparent mode, but rather implements a state machine that get the modem through all init until UDP "connection".
It makes use of an extra pair of ring buffers, and implements a new interface that FastSerial also implements. That means, in ArduPlane.pde and system.pde, one just has to define an instance of my class using a serial port, and in GCS_MAVLink.pde have channel 1 to use that instance instead of the FastSerial instance. So a sort of stream filter.
Configuration (access point name, host name and port etc.) is currently hardwired but something settable will come later.
I a not sure how to proceed with making this available.. anyway if anyone is interested in testing it, pse contact me.