[quote pid='3517' dateline='1509705309']
u r trying to recreate MPGuino
just reuse proven code with years behind it and many member coders
Something else worth considering is the ESP32 or ESP8266 and pass the data over wifi. I haven't got a ESP32 to play with yet but the ESP8266 works OK over wifi. Programmed just like an Arduino. This sketch connects to the AIS nmea output of a GX2100 radio and sends the data to openplotter.
The ESP32 looks even more powerful.
Also, adding a ADS1115 board to Openplotter means you can measure battery voltage so you can keep and eye if all this stuff is draining your bank too much
You'll need a serial to TTL convertor to get NMEA into an arduino or ESP, cheap on ebay.
[/quote]
u r trying to recreate MPGuino
just reuse proven code with years behind it and many member coders
Something else worth considering is the ESP32 or ESP8266 and pass the data over wifi. I haven't got a ESP32 to play with yet but the ESP8266 works OK over wifi. Programmed just like an Arduino. This sketch connects to the AIS nmea output of a GX2100 radio and sends the data to openplotter.
The ESP32 looks even more powerful.
Also, adding a ADS1115 board to Openplotter means you can measure battery voltage so you can keep and eye if all this stuff is draining your bank too much
You'll need a serial to TTL convertor to get NMEA into an arduino or ESP, cheap on ebay.
Code:
/** This sketch sends broadcast udp message.
*
*
*/
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include <PubSubClient.h> // mqtt library
#define mqtt_server "10.10.10.1"
#define mqtt_user "User"
#define mqtt_password "Password"
const char* ssid = "OpenPlotter";
const char* password = "password";
//const char* ssid = "*****";
//const char* password = "*******";
IPAddress ipBroadCast(10, 10, 10, 255);
unsigned int udpRemotePort=10112;
unsigned int udplocalPort=2390;
const int UDP_PACKET_SIZE = 70;
char udpBuffer[ UDP_PACKET_SIZE];
String inData;
WiFiUDP udp;
WiFiClient espClient;
PubSubClient client(espClient);
SoftwareSerial mySerial(14, 12);
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i=0;i<length;i++) {
char receivedChar = (char)payload[i];
Serial.print(receivedChar);
}
Serial.println();
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Attempt to connect
// If you do not want to use a username and password, change next line to
// if (client.connect("ESP8266Client")) {
if (client.connect("ESP8266Client", mqtt_user, mqtt_password)) {
Serial.println("connected");
client.subscribe("myfirstin");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Wait 5 seconds before retrying
delay(5000);
}
}
}
//================================================================
// Setup hardware, serial port, and connect to wifi.
//================================================================
void setup() {
Serial.begin(115200);
mySerial.begin(4800);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// Try to connect to wifi access point
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Starting UDP");
// set udp port for listen
udp.begin(udplocalPort);
Serial.print("Local port: ");
Serial.println(udp.localPort());
client.setServer(mqtt_server, 1883); //start mqtt
client.setCallback(callback); // set callback routine to monitor incoming mqtt
client.subscribe("myfirst");
}
//================================================================
// Function to send udp message
//================================================================
void fncUdpSend(String inData)
{
char temp[50];
inData.toCharArray(temp, 50) ;
udp.beginPacket(ipBroadCast, udpRemotePort);
udp.write(temp, sizeof(temp));
udp.endPacket();
Serial.print("sent - ");
Serial.println(inData);
}
//================================================================
// LOOP MAIN
//================================================================
void loop() {
while (mySerial.available() > 0) {
char recieved = mySerial.read();
inData+= recieved;
// Process message when new line character is recieved
if (recieved == '\n')
{
Serial.print("Arduino Received: ");
Serial.print(inData);
fncUdpSend(inData);
char temp[50];
inData.toCharArray(temp, 50) ;
client.publish("myfirstout", temp);
inData = ""; // Clear recieved buffer
}
}
// if (!client.connected()) {
// reconnect();
//}
//client.loop();
}
[/quote]