in via sperimentale.. per chi vuole provare, non garantisco il funzionamento continuo, perchè dipende dal gestore telefonico.
materiale:
Arduino uno (25 EU)
shield gps (40 EU)
shield wifi (80 EU)
attivazione no-ip.com per gsm (free)
router tp-link 3020
chiavetta internet (sim voce dati tim)
Router e chiavetta sono fissi per quando devo connettermi in internet con tablet o smartphone o camper amico.
pc da casa con caricato Processing
sketch arduino...
sketch processing...
continua..
[:p]
edit: alla fine basta schiacciare il mouse del nostro pc per vedere dove sta il camper [:D]
sketch per Arduino, qui uso Arduino UNO
serve in più la libreria TinyGps da scaricare
[code]#include <SoftwareSerial.h>
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>
#include <TinyGPS.h>
int status = WL_IDLE_STATUS;
char ssid[] = "miorouter"; // your network SSID (name)
char pass[] = "passmiorouter"; // your network password
unsigned int localPort = 2400; // porta locale in ascolto
int keyIndex = 0;
WiFiUDP Udp;
TinyGPS gps;
SoftwareSerial mySerial(8, 9); // RX, TX
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];
String ss;
int time;
void setup() {
delay(120000);
Serial.begin(9600);
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
while (true);
}
while ( status != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(ssid);
status = WiFi.begin(ssid, pass);
delay(10000);
IPAddress ip = WiFi.localIP();
Serial.println(ip);
}
Serial.println("Connected to wifi");
//printWifiStatus();
Serial.println("\nStarting connection to server...");
Udp.begin(localPort);
mySerial.begin(9600);
}
void loop() {
int packetSize = Udp.parsePacket();
if (packetSize )
{
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
ss = packetBuffer;
if (ss == "j") gpscamper();
}
}
void gpscamper()
{
bool newData = false;
for (unsigned long start = millis(); millis() - start < 2000;)
{
while (mySerial.available())
{
char c = mySerial.read();
if (gps.encode(c))
newData = true;
}
}
if (newData)
{
float flat, flon;
gps.f_get_position(&flat, &flon );
Udp.beginPacket( Udp.remoteIP(), Udp.remotePort());
Udp.print(flat, 6);
Udp.print(" ");
Udp.print (flon, 6);
Udp.endPacket();
}
}[/code]
sketch Processing
no googlemaps, è uscita finalmente la nuova libreria "unfolding" per Processing 2
e tutto è più semplice
si deve scaricare oltre Processing anche "unfolding" appunto..
[code]import hypermedia.net.*;
import de.fhpotsdam.unfolding.*;
import de.fhpotsdam.unfolding.geo.*;
import de.fhpotsdam.unfolding.utils.*;
UnfoldingMap map;
UDP udp;
String ip;
int Port_Proc;
int Port_Ard;
int time;
float latitudine;
float longitudine;
String latit;
String longit;
String [] datiGps;
String latitudin ;
String longitudin ;
int zoom = 16;
float xOffset ;
float yOffset ;
int zoomGoogle = 8 ;
float by ;
float bx ;
void setup() {
ip = "mioIpDiNoip.no-ip.biz";
Port_Proc = int (2200);
Port_Ard = int (2400);
udp = new UDP( this, Port_Proc );
udp.log( true );
udp.listen( true );
delay (1000);
frameRate(25);
smooth(8);
time = millis();
size(800, 600);
map = new UnfoldingMap(this);
MapUtils.createDefaultEventDispatcher(this, map);
}
void draw() {
map.draw();
Location location = map.getLocation(mouseX, mouseY);
text(location.toString(), mouseX, mouseY);
fill (255, 0, 0);
ellipse(width/2, height/2, 5, 5);
if ((time+7000)<millis())
{
udp.send( "j", ip, Port_Ard );
time = millis();
}
map.zoomAndPanTo(new Location(latitudine, longitudine), zoom);
}
void receive( byte[] data )
{
latit = new String( data );
datiGps = splitTokens(latit, " ");
latitudin = datiGps[0];
longitudin = datiGps[1];
latitudine = new Float(latitudin);
longitudine = new Float(longitudin);
println (datiGps[0]);
}
void mousePressed() {
xOffset = (mouseX-bx);
yOffset = (mouseY-by);
}
void mouseDragged() {
bx = (mouseX-xOffset);
by = (mouseY-yOffset);
}
void mouseReleased() {
if (mouseX >0 && mouseX <width/5 && mouseY >0&& mouseY < height/2 ) {
zoom = zoom + 1;
}
if (mouseX >0 && mouseX <width/5 && mouseY >height/2 && mouseY <height) {
zoom = zoom - 1;
xOffset = (mouseX-bx); //per gps
yOffset = (mouseY-by); //per gps
}
}[/code]
Modificato da camperos il 10/05/2014 alle 14:56:38