In diesem Thread nun einige Scripts bzw. C++Source-Codes als kleine Helferlein für Sensorenabfragen etc.:
DS18B20 (USB)
Temperatursensor DS18B20 an Interface AT90USB162
Mit diesem Programm wird der Temperatursensor gelesen. Je nach Parameter wird der Wert in 1/10 Grad (245 = 24,5°C) oder optisch aufbereitet mit weiteren Informationen zu Sensor und Interface angezeigt. Hilfe mit Option -h oder --help.
Bibliotheken:
apt-get install libusb-1.0-0 libusb-1.0-0-dev xserver-xorg-dev
tempusb.cpp
DHT11, DHT22 und AM2302 (GPIO wiringPi)
Temperatur-/Luftfeuchtigkeitssensor Lesemodul für Sensor DHT11, DHT22 und AM2302 an GPIO wiringPi
Mit diesem Programm wird Temperatur und Luftfeuchtigkeit gelesen. Je nach Parameter wird der Wert für Temperatur, Luftfeuchtigkeit oder optisch aufbereitet mit weiteren Informationen zum Sensor angezeigt. Hilfe mit Option -h oder --help.
Bibliotheken:
apt-get install wiringPi
tempfeuchtwpi.cpp
DS18B20 (USB)
Temperatursensor DS18B20 an Interface AT90USB162
Mit diesem Programm wird der Temperatursensor gelesen. Je nach Parameter wird der Wert in 1/10 Grad (245 = 24,5°C) oder optisch aufbereitet mit weiteren Informationen zu Sensor und Interface angezeigt. Hilfe mit Option -h oder --help.
Bibliotheken:
apt-get install libusb-1.0-0 libusb-1.0-0-dev xserver-xorg-dev
tempusb.cpp
Code:
/*
╔═══╗ ╔═══╗ ╔═══╗ ┌───────────────────────────────────────────────────┐
║ ║ ║ ║ │ SensorAndSwitch (C)2014-16 Bluedragon │
╚═══╗ ╠═══╣ ╚═══╗ ├──────────────────┬────────────────────────────────┤
║ ║ ║ ║ │ C++ │ tempusb.cpp │
╚═══╝ ╝ ╚ ╚═══╝ ├──────────────────┴────────────────────────────────┤
┌─────────────────┤ Temperatur USB │
│ Info: ╘═══════════════════════════════════════════════════╡
├─────────────────────────────────────────────────────────────────────┤
│ USB-Temperatursensor Lesemodul für Temperatursensor DS18B20 an │
│ Interface AT90USB162 │
│ │
│ ┌───────────────┐ │
├─┤ Compilierung: ├───────────────────────────────────────────────────┤
│ ╘═══════════════╛ │
│ g++ tempusb.cpp -otempusb -lusb-1.0 │
│ ./tempusb │
╘═════════════════════════════════════════════════════════════════════╛
*/
#include <cstdlib>
#include <cstdio>
#include <locale>
#include <iostream>
#include <libusb-1.0/libusb.h>
using namespace std;
int main(int argc, char *argv[]) {
/******************************/
char ver[] = "1.00.0272";
char cpr[] = "(C)2016 BlueDragon";
libusb_device_handle* handle;
libusb_device* dev;
struct libusb_device_descriptor desc;
struct libusb_config_descriptor *config;
int vid = 0x16c0;
int pid = 0x0480;
int interface = 0;
int in = 0x81;
int leng = 64;
unsigned int timeout = 5000;
int res;
int kernelDriverDetached;
int numBytes;
int bus;
int devadr;
unsigned char buffer[leng];
char temp[10];
char* p;
int itemp;
float ftemp;
bool fehler = false;
string help1 = "-h";
string help2 = "--help";
string info1 = "info";
string info2 = "-i";
string info3 = "--info";
string info4 = "-info";
string info5 = "i";
setlocale(LC_ALL, "de_DE");
if (argc > 1 && ( argv[1] == help1 || argv[1] == help2)) {
fprintf(stdout, "┌──────────────────────────────────────────────┐\n");
fprintf(stdout, "│\e[45m\e[1m tempusb Version %s %s \e[0m│\n",
ver,
cpr);
fprintf(stdout, "├──────────────────────────────────────────────┤\n");
fprintf(stdout, "│ \e[1m\e[44mSyntax:\e[0m │\n");
fprintf(stdout, "│ tempusb │\n");
fprintf(stdout, "│ - liefert den Wert des USB-Temperatur-│\n");
fprintf(stdout, "│ sensors als 1/10 Grad Celsius │\n");
fprintf(stdout, "│ (z. B. 245 = 24,5°C) │\n");
fprintf(stdout, "│ tempusb -i|i|--info|-info|info │\n");
fprintf(stdout, "│ - zeigt den Wert aufbereitet als Grad │\n");
fprintf(stdout, "│ Celsius mit einer Kommastelle und │\n");
fprintf(stdout, "│ Informationen zum USB-Temperatur- │\n");
fprintf(stdout, "│ sensor an │\n");
fprintf(stdout, "│ tempusb -h|--help │\n");
fprintf(stdout, "│ - diese Hilfe │\n");
fprintf(stdout, "└──────────────────────────────────────────────┘\n");
return 1;
}
res = libusb_init(0);
if (res != 0) {
fehler = true;
fprintf(stderr, "Fehler: Initialisierung libusb. (ggf. apt-get install libusb-1.0-0 libusb-1.0-0-dev)\n");
return 1;
}
handle = libusb_open_device_with_vid_pid(NULL, vid, pid);
if (!handle) {
fehler = true;
fprintf(stderr, "Fehler: Gerätezugriff; Gerät %04X:%04X Interface AT90USB162 mit USB-Temperatursensor DS18B20 nicht gefunden.\n",
vid,
pid);
return 1;
}
dev = libusb_get_device(handle);
res = libusb_get_device_descriptor(dev, &desc);
if (res != 0) {
fehler = true;
fprintf(stderr, "Fehler: Lesen der Geräte-Beschreibung fehlgeschlagen.\n");
return 1;
}
res = libusb_get_config_descriptor(dev, 0, &config);
if (res != 0) {
fehler = true;
fprintf(stderr, "Fehler: Lesen der Konfigurations-Beschreibung fehlgeschlagen.\n");
return 1;
}
if (libusb_kernel_driver_active(handle, interface)) {
res = libusb_detach_kernel_driver(handle, interface);
if (res == 0) {
kernelDriverDetached=1;
}
else {
fehler = true;
fprintf(stderr, "Fehler: Kerneltreibertrennung.\n");
return 1;
}
}
res = libusb_claim_interface(handle, interface);
if (res != 0) {
fehler = true;
fprintf(stderr, "Fehler: Interfacebelegung für Zugriff.\n");
return 1;
}
res = libusb_interrupt_transfer(handle, in, buffer, leng, &numBytes, timeout);
if (res == 0) {
if (numBytes == leng) {
itemp = buffer[4] + buffer[5] * 256;
if (itemp > 32768) {
itemp -= 65536;
}
sprintf(temp, "%d",
itemp);
}
else {
fehler = true;
fprintf(stderr, "Warnung: Empfangen %d Byte(s), anstelle von %d Bytes.\n",
numBytes,
leng);
if (numBytes >= 6) {
itemp = buffer[4] + buffer[5] * 256;
if (itemp > 32768) {
itemp -= 65536;
}
sprintf(temp, "%d",
itemp);
}
}
}
else
{
fehler = true;
fprintf(stderr, "Fehler: Datenübertragung.\n");
}
res = libusb_release_interface(handle, interface);
if (res != 0) {
fehler = true;
fprintf(stderr, "Fehler: Interfacefreigabe.\n");
}
bus = libusb_get_bus_number(dev);
devadr = libusb_get_device_address(dev);
if (kernelDriverDetached) {
libusb_attach_kernel_driver(handle, interface);
}
libusb_exit(0);
ftemp = itemp;
ftemp = ftemp /10;
if (argc > 1 && (argv[1] == info1 || argv[1] == info2 || argv[1] == info3 || argv[1] == info4 || argv[1] == info5)) {
fprintf(stdout, "┌──────────────────────────────────────────────┐\n");
fprintf(stdout, "│\e[45m\e[1m tempusb Version %s %s \e[0m│\n",
ver,
cpr);
fprintf(stdout, "├─────────────────────────────────────┬────────┤\n");
fprintf(stdout, "│ USB-Temperatursensor DS18B20 │\e[36m\e[1m%5.1f°C\e[0m │\n",
ftemp);
fprintf(stdout, "│ an Interface AT90USB162 │ │\n");
fprintf(stdout, "├─────────────────────────────────────┼────────┤\n");
fprintf(stdout, "│ Gerät \e[33m%04X:%04X\e[0m Bus:\e[33m%3u\e[0m Dev:\e[33m%3u\e[0m │ │\n",
desc.idVendor,
desc.idProduct,
bus,devadr);
fprintf(stdout, "│ MaxPower:\e[33m%4umA\e[0m Interfaces:\e[33m%3u\e[0m │ │\n",
config->MaxPower * 2,
config->bNumInterfaces);
fprintf(stdout, "│ \e[33m0x%02X\e[0m(IN):\e[33m%3u\e[0m Byte(s) von\e[33m%3u\e[0m Byte(s) │ ",
in,
numBytes,
leng);
if (fehler) {
fprintf(stdout, "\e[31m\e[1mFehler\e[0m │\n");
}
else {
fprintf(stdout, "\e[32m\e[1mOk \e[0m │\n");
}
fprintf(stdout, "└─────────────────────────────────────┴────────┘\n");
}
else {
fprintf(stdout, "%s\n",
temp);
}
return 0;
}
DHT11, DHT22 und AM2302 (GPIO wiringPi)
Temperatur-/Luftfeuchtigkeitssensor Lesemodul für Sensor DHT11, DHT22 und AM2302 an GPIO wiringPi
Mit diesem Programm wird Temperatur und Luftfeuchtigkeit gelesen. Je nach Parameter wird der Wert für Temperatur, Luftfeuchtigkeit oder optisch aufbereitet mit weiteren Informationen zum Sensor angezeigt. Hilfe mit Option -h oder --help.
Bibliotheken:
apt-get install wiringPi
tempfeuchtwpi.cpp
Code:
in Arbeit...