Temat: Pomiar temperatury openwrt + arduino

Witam, w jaki sposób mogę zapisywać na openwrt pomiar temperatury wysyłany z arduino? Próbowałem coś w stylu:

echo $(date) Sensor 1 C: >> /www/test
cat /dev/ttyUSB0 >> /www/test

Tyle, że działa to w ten sposób, że do pliku test zapiszę się tylko 1 linia z datą a reszta to sama temperatura. Macie może jakieś inne pomysły?

2 (edytowany przez wabikboy 2014-01-21 13:39:17)

Odp: Pomiar temperatury openwrt + arduino

W ten sposób co podałeś wpisujesz datę do pliku /www/test a potem robisz odczyt w "pętli" samej temperatury dlatego Ci tylko temperaturę pokazuje.

Jeśli odczyt temperatury na arduino następuje co określony czas to bedziesz miał trochę zabawy z tym, a łatwiej by było wysłać żądanie odczytu do arduino a następnie go odczytać np:

echo "odczyt" > /dev/ttyUSB0 && echo $(date) Sensor 1 C: >> /www/test && cat /dev/ttyUSB0 >> /www/test
sleep 1
killall cat
TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

3

Odp: Pomiar temperatury openwrt + arduino

Coś nie działa. Gdy arduino jest podłączone do komputera to wszystko gra. Wysyłam literę E w terminalu i otrzymuję odpowiedź z temperaturą.

Kody

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
int incomingByte = 0;

void setup(void)
{
  // start serial port
  Serial.begin(9600);

  // Start up the library
  sensors.begin();
}

void loop(void)
{ 
  // call sensors.requestTemperatures() to issue a global temperature 
  // request to all devices on the bus
   if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();
                if (incomingByte == 69) 
                sensors.requestTemperatures(); // Send the command to get temperatures
                Serial.println(sensors.getTempCByIndex(0));  
        }
  

}

Próbowałem wysyłać E i 69 lecz bez zmian.

4

Odp: Pomiar temperatury openwrt + arduino

W "C" nie bardzo mogę Ci pomóc, ale czy jak wpisujesz "E" czy to 69 to naciskasz enter ?? bo jeśli nie to może wstaw małe opóźnienie aby arduino mogło zdążyć odczytać.

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

5

Odp: Pomiar temperatury openwrt + arduino

Jeśli wysyłam "E" to naciskam enter aby wysłać znak, wtedy otrzymuje wiadomość zwrotną w postaci temperatury.

6

Odp: Pomiar temperatury openwrt + arduino

sprawdź to:

echo "E" > /dev/ttyUSB0 && tail -f /dev/ttyUSB0

jak nie zadziała to musisz przerobić kod w Arduino.

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

7

Odp: Pomiar temperatury openwrt + arduino

A jest jakiś sposób, aby zatrzymać cat'a w skrypcie? Bo mógłbym po prostu korzystać z

echo $(date) Sensor 1 C: >> /www/test.txt && cat /dev/ttyUSB0 >> /www/test.txt

i wywoływać tą funkcję co określony czas, lecz niestety killall cat nie działa i ciągle zapisuje temperaturę do pliku.

8 (edytowany przez wabikboy 2014-01-21 14:58:29)

Odp: Pomiar temperatury openwrt + arduino

echo $(date) Sensor 1 C: >> /www/test.txt && cat /dev/ttyUSB0 >> /www/test.txt
sleep 1 # O ile odczyt masz co sekundę, a jeśli rzadziej to ustaw tak jak następuje odczyt
killall cat

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

9

Odp: Pomiar temperatury openwrt + arduino

To jak mówiłem niestety nie działa.

10

Odp: Pomiar temperatury openwrt + arduino

to spróbuj killall -9 cat

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

11

Odp: Pomiar temperatury openwrt + arduino

Również nic. Jest jakieś inne narzędzie oprócz cat'a, aby zapisywać dane z rs232?

12 (edytowany przez wabikboy 2014-01-21 15:06:39)

Odp: Pomiar temperatury openwrt + arduino

tail -f /dev/ttyUSB0 lub read /dev/ttyUSB0

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

13

Odp: Pomiar temperatury openwrt + arduino

Ani tail ani read nie działają. Zmuszony jestem dalej walczyć z cat'em.

14

Odp: Pomiar temperatury openwrt + arduino

Tu Masz coś z tym związane

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

15

Odp: Pomiar temperatury openwrt + arduino

Jeżeli temperaturę kończysz enterem (a tak robisz) to zwykły grep wystarczy

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

16

Odp: Pomiar temperatury openwrt + arduino

wabikboy napisał/a:

Tu Masz coś z tym związane


Wolałbym zapisywać sobie bezpośrednio to do pliku.

Cezary napisał/a:

Jeżeli temperaturę kończysz enterem (a tak robisz) to zwykły grep wystarczy

Mógłbyś powiedzieć coś więcej na ten temat? Jak to ugryźć?

17

Odp: Pomiar temperatury openwrt + arduino

Wysyłaj temperaturę jako T:23.0<enter>. Wtedy:

cat /dev/ttyUSB0 |  grep -m1 "T:"

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

18 (edytowany przez Bartekk 2014-01-21 22:14:12)

Odp: Pomiar temperatury openwrt + arduino

Chodzi Tobie o to, aby po temperaturze wysyłać znak entera tak? Może być w DEC? Coś w stylu:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

void setup(void)
{
  // start serial port
  Serial.begin(9600);

  // Start up the library
  sensors.begin();
}

void loop(void)
{ 

  Serial.print("T:");
  Serial.print(sensors.getTempCByIndex(0));  
  Serial.print(13, DEC);
  Serial.println("");

}

Ten kod wypluwa mi w konsoli takie coś:

T:26.1913

Ta 13-tka na końcu to CR w DEC.

19

Odp: Pomiar temperatury openwrt + arduino

println przecież znak entera domyślnie wysyła (znak nowej linii)

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

20 (edytowany przez Bartekk 2014-01-21 22:13:00)

Odp: Pomiar temperatury openwrt + arduino

Tak więc ogółem ma wyglądać to tak:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
int incomingByte = 0; 

void setup(void)
{
  // start serial port
  Serial.begin(9600);

  // Start up the library
  sensors.begin();
}

void loop(void)
{
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.print("T:");
  Serial.println(sensors.getTempCByIndex(0));  
  
                
}

}

+

echo $(date) Sensor 1 C: >> /www/test.txt && cat /dev/ttyUSB0 |  grep -m1 "T:" >> /www/test.txt

Tylko jak tego cat'a zatrzymać, aby tylko raz wykonał zapis z uart'a do pliku?

21

Odp: Pomiar temperatury openwrt + arduino

To zrób grep -m1 "T:" /dev/ttyUSB0

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

22

Odp: Pomiar temperatury openwrt + arduino

It works big_smile Dzięki bardzo Cezary. Powiedz mi jeszcze, czy da się jakoś sformatować funkcję date, aby wyświetlała tylko

Tue Jan 21 21:23:10

a nie jak dotychczas

Tue Jan 21 21:23:10 UTC 2014

Na polskie nazwy tygodni i miesięcy nie mam co liczyć, nie?

23

Odp: Pomiar temperatury openwrt + arduino

man date w google wpisz

date +%Y-%m-%d itd. Polskich nie, musisz sobie sedem pojechać po nazwach.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

24

Odp: Pomiar temperatury openwrt + arduino

Cezary pytanie odnośnie "grep -m1" co to za opcja bo w manie nie widzę tego ale jest {,m} czy to jest to samo ??

TL-WR1043ND: HDD-USB, extroot, LCD, Pilot, MP3 - Radio Player, NAS, Torrent, FTP, Sterowanie głosem, Komunikaty Głosowe, Termometr, PowerSwitch - Sterownik oświetlenia, Budzik, LTE - ODU IDU 200
Raspberry Pi + HDMI-VGA + Lcd Controller + Lcd z laptopa = Pogodynka smile

25

Odp: Pomiar temperatury openwrt + arduino

Czy któryś z szanownych kolegów wie może jak wrzucić dane z pliku .txt do bazy sqlite przez php?