Go Down

Topic: Arduino Yun: Storing Data in Mysql installed on Linino (Read 14299 times) previous topic - next topic

sonnyyu

You are missing "#!/usr/bin/python" at beginning of python.

nlourenco

That's strange... because i've already that line in my code:

Code: [Select]
#!/usr/bin/python
# -*- coding: utf-8 -*-

import _mysql
import sys, string, os
#print sys.argv


try:
    con = _mysql.connect('127.0.0.1', 'root', '123456789', 'homeautomation')
    #con.query("SELECT VERSION()")
    #result = con.use_result()
    #print "MySQL version: %s" %  result.fetch_row()[0]
sqlstr="INSERT INTO NossoTeste (valor ,tensao) VALUES( " + sys.argv[1] +", '" + sys.argv[2] + "')"
#print  sqlstr
con.query(sqlstr)
   
except _mysql.Error, e:
 
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit(1)

finally:
   
    if con:
        con.close()


If i put, in the command line just:
/mnt/sda1/mysql.py
-ash: /mnt/sda1/mysql.py: not found



nlourenco

One more problem:

if i put values in addparameter, this work perfectly.
Ex:
Code: [Select]
#include <Process.h>
void setup() {
  // put your setup code here, to run once:
Bridge.begin();
insertdb();
}

void loop() {
  // put your main code here, to run repeatedly:

}
void insertdb() {
  Process p;           
  p.begin("/usr/bin/python");     
  p.addParameter("/mnt/sda1/mysql.py");
  p.addParameter("10"); 
  p.addParameter("2.27");
  p.run();
  }


But if i put values from a variable, it returns an error.
Ex:
Code: [Select]
#include <Process.h>
int sensorPin = 0;
int teste1 = 1005;
int teste2= 4.23;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
Serial.println("Bit \t Tensao (V)");
Bridge.begin();
insertdb(teste1, teste2);
}

void loop() {
  // put your main code here, to run repeatedly:
int reading = analogRead(sensorPin);
float tensao = reading * 4.88;
tensao /= 1024.0;

Serial.print(reading);
Serial.print("\t");
Serial.print("\t");

Serial.print(tensao);
Serial.print("\t");
Serial.print("\n");
  delay(1000);
}
void insertdb(int x, int y) {
  Process p;           
  p.begin("/usr/bin/python");     
  p.addParameter("/mnt/sda1/mysql.py");
  p.addParameter(x); 
  p.addParameter(y);
  p.run();
  }


the error is:
Arduino: 1.5.6-r2 (Windows 8), Placa:"Arduino Yún"

ler_tensoes.ino: In function 'void insertdb(int, int)':
ler_tensoes:32: error: conversion from 'int' to 'const String' is ambiguous
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:61: note: candidates are: String::String(const __FlashStringHelper*) <near match>
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:59: note:                 String::String(const char*) <near match>
ler_tensoes:33: error: conversion from 'int' to 'const String' is ambiguous
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:61: note: candidates are: String::String(const __FlashStringHelper*) <near match>
C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:59: note:                 String::String(const char*) <near match>

Do you know how to solve it?

Best Regards

sonnyyu

Code: [Select]
String stringOne =  String(analogRead(0), DEC);     // using an int and a base
String stringOne =  String(13);                     // using a constant integer
...
void insertdb(String x, String y) {
...


http://arduino.cc/en/Tutorial/StringConstructors#.UxwMAvldVtU


nlourenco

Hey,

I have a new problem,

My code
Code: [Select]
#include <Process.h>

int sensorPin = 0; //seleciona o PIN analógico em que se mede a tensão


void setup() {//funcao de parameterização que corre uma vez, no inicio do script
 
  Serial.begin(9600);//inicia a comunicação série, para se visualizar os resultados no serial monitor
  Serial.println("Bit \t Tensao (V)");//define o layout de colunas para a comunicação série
  Bridge.begin();//inicia a comunicação bridge, por forma a ligar o processador linux com o atmega

}

void loop() {//funcao de rotina, que corre em loop perpétuamente
 
int reading = analogRead(sensorPin); //efectua a leitura do pin definido na linha 2 numa resolução de 10 bits 2^10=1024
    float tensao = reading * 4.88; //conversão do valor lido em tensão 1024 corresponde a 4.88 V
     tensao /= 1024.0;
     
int tempo = millis();
     
      // guarda o valor lido binario
Serial.print(tempo);
Serial.print("\t");
Serial.print("\t");

        Serial.print(reading);//valor da leitura na porta série
         Serial.print("\t");
         Serial.print("\t");

        Serial.print(tensao);//valor da tensão na porta série
         Serial.print("\t");
         Serial.print("\n");
  //delayMicroseconds(50);
  delay(1000); //espera 1000 ms e executa novamente a função loop
  //delayMicroseconds(50);
  //insertdb(reading, tensao);//executa a função insertdb com os parametrosm reading e tensao
  Process p;           
    String pin1 = String(reading);//transforma as leituras efectuadas em strings
    String pin2 = String(tensao);//transforma as leituras efectuadas em strings
 
  p.begin("/usr/bin/python");//inicia um processo na linha de comandos linux com o codigo "/usr/bin/python"     
  p.addParameter("/mnt/sda1/mysql.py");// adiciona à linha de comando "/mnt/sda1/mysql.py" resultado root@Arduino:~# /usr/bin/python /mnt/sda1/mysql.py
  p.addParameter(pin1);  // adiciona o parametro 1 a inserir, que vai ser adquirido pela variável " + sys.argv[1] +" em Python
  p.addParameter(pin2); // adiciona o parametro 2 a inserir, que vai ser adquirido pela variável " + sys.argv[2] +" em Python
  p.run();//executa o comando linux
}


With this code, my arduino stores every second the values of reading and tensao in my db.

If i change the delay time to 1, it should store the values every millisecond.

unfortunately it keeps to store the values every second.

How can i solve that?

Best Regards

sonnyyu


...
If i change the delay time to 1, it should store the values every millisecond.
...


The bottleneck is bridge speed, try to use 500 ms first, then test speed up?

nlourenco

Thanks.

I'm trying now, to read the values on the serial port.

here goes the code:
Code: [Select]
float potpin = 0;    //  variavel que define a porta do potenciometro.
int ROW = 0;         // variavel que se refere as linhas do excel
int LABEL = 1;   
int val = 0;               // variavel que guarda o valor lido do potenciometro
void setup(){
Serial.begin(9600);                     //  inicialização da comunicação serial
Serial.println("CLEARDATA");            // Reset da comunicação serial
Serial.println("LABEL,Time,val,tempo,ROW");   // Nomeia as colunas
//Serial.println("val,tempo,ROW");
}
void loop(){
//unsigned long tempo = millis();
unsigned long tempo = micros();
val = analogRead(potpin);   // faz a leitura do potenciometro e guarda o valor em val.
ROW++; // incrementa a linha do excel para que a leitura pule de linha em linha
Serial.print("DATA,TIME,"); //inicia a impressão de dados, sempre iniciando
Serial.print(val);
Serial.print(",");
Serial.print(tempo);
Serial.print(",");
Serial.println(ROW);
if (ROW > 512) //laço para limitar a quantidade de dados
{
ROW = 0;
Serial.println("ROW,SET,2"); // alimentação das linhas com os dados sempre iniciando
}
//delay(1);  // espera 200 milisegundos
delayMicroseconds(1);
}


An Example of samples:

tempo               valor               time          id   timesplit
18:23:48   1023.00   15324836   1   
18:23:48   1023.00   15326028   2   1192
18:23:48   1023.00   15327220   3   1192
18:23:48   1023.00   15328428   4   1208

In time column, it's the time in microseconds.

So the gap between sample 1 and sample 2, is 1192 microseconds, 1.2 milliseconds.

There is any way to take that value down?

Thanks


sibuda23

im taking a chance here, but  have gone through the whole forum, and when i run my python script in putty i get a NameError: name 'con' is not defined error, tired everything you mentioned in the comments but its not working

may you please help me out


Go Up