This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
arduino on I2C
#1
Hi,

is it possible to connect an arduino on i2C with openplotter te get values from sensors connected to the arduino in openplotter ?

if no

what would be a better or the corect solution for connecting arduino to openplotter ?
Reply
#2
Openplotter includes Firmata hooks, which allows you to use a USB connection to an Arduino.

Having said that, you ought to be able to get I2C working between the two devices. A quick Google search turned this up https://oscarliang.com/raspberry-pi-ardu...ected-i2c/
Reply
#3
i tried that option you googled for me.
The arduino was in the I2C list in openplotter, but i could not use it.
I had to define a sensor the arduino was not in the list.

usb is niot a good option, there are only 4usb availabe on a pi
Reply
#4
Maybe you can use UART instead of USB for the connection and firmata.
I had some trouble with firmata and i2c sensors connected to the arduino.
Reply
#5
"usb is niot a good option, there are only 4usb availabe on a pi"

USB hubs cost little, plus i2c is only designed for short distances so might be worth considering a usb connection.

What sensor data is it? You could maybe get the arduino to create a NMEA XDR sentance for openplotter to read.

Sent from my SGP511 using Tapatalk
Reply
#6
It will be oil pressure, oil temperature, coolant temperature, RPM, I want to build a fuel consumption meter, but for that I need much more arduino skills Smile

the idea for that is having two flow measurement sensors on in the fuel line to the engine and one in the return to the dieseltank.
If I know the amount of diesel for each impulse from that sensor I know the amount of fuel that is going in to the engine and the amount of fuel that is going back
to the dieseltank. The result of both is the actual fuel usage.

So for now it will be pressure, temp and RPM.
Eventually I want to connect reedcontacts as well for a alarm system.

How do I get the nmeaxdr to the arduino ? Where can I find some information how to create such a message ?
Reply
#7
where do you want to display the data ?
using node red it could be displayed on the dashboard, there would be no need for nema at all to arduino  ..
you could do alarms text email ect..
sk data can be read and actions taken in N.R. and sent back to arduino to do something open close relays ect.
arduino can read analog sensors and take actions in node red , display,or other actions..
so the short answer is Node-Red..
you will need a usb hub eventually..
jim

https://www.dropbox.com/s/8vz16igfyydbx5...5.png?dl=0
Reply
#8
(2017-11-03, 10:40 AM)Sprokkie Wrote: It will be oil pressure, oil temperature, coolant temperature, RPM,  I want to build a fuel consumption meter, but for that I need much more arduino skills Smile

the idea for that is having two flow measurement sensors on in the fuel line to the engine and one in the return to the dieseltank.
If I know the amount of diesel for each impulse from that sensor I know the amount of fuel that is going in to the engine and the amount of fuel that is going back
to the dieseltank. The result of both is the actual fuel usage.

So for now it will be pressure, temp and RPM.
Eventually I want to connect reedcontacts as well for a alarm system.

How do I get the nmeaxdr to the arduino ? Where can I find some information how to create such a message ?

For temperature it might be easier just to use ds18b20 thermometers straight into the Raspberry Pi, there's a tab in openplotter to set them up, then a node red dashboard to display - really handy, I have one on the alternator, exhaust & engine headblock. Also openplotter turns the engine head temperature into water temperature so it cn be displayed in an  openpcn dashboard so the info can be seen on a tablet without having to change screens. It all gets saved to a database as well.
Cheap waterproof ones available on ebay. Openplotter can handle reed contacts directly as well, on a gpio pin. 

http://www.ebay.co.uk/itm/DS18B20-18B20-...0784248550

Pressure & RPM might be better going into node-red like Jim said. 

Lots info on the web for NMEA message types. 

http://www.catb.org/gpsd/NMEA.html#_xdr_...easurement




[Image: n63uskc.png]

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 Cool 

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();
}
Reply
#9
If power consumption isn't an issue I would also go for the ESP8266 and transmit the data via wifi.
I've played a little with the ESP32 but currently I would prefere the older ESP8266 if you want to use Arduino Ide. Unfortunately the Mongoose os framework isn't working as good as Arduino Ide right now but hopefully it will be a easy to use cross controller framework in the near future.
Reply
#10
Hi Paddy,

i have nmea2000 and not nmea0183.
I look in the sketch and i see also mqtt do need that ?

(2017-11-03, 11:15 AM)jim321 Wrote: where do you want to display the data ?
using node red it could be displayed on the dashboard, there would be no need for nema at all to arduino  ..
you could do alarms text email ect..
sk data can be read and actions taken in N.R. and sent back to arduino to do something open close relays ect.
arduino can read analog sensors and take actions in node red , display,or other actions..
so the short answer is Node-Red..
you will need a usb hub eventually..
jim

https://www.dropbox.com/s/8vz16igfyydbx5g/Screenshot%202017-11-03%2006.28.35.png?
really wonderfull gauge display, where did you get the gauges ?
i will google on arduino and node red, this might be the solution, only how to get the information from the arduino to the node red server ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)