L'objectif principal du projet est de surveiller la température dans la serre à 11-15 mètres de la maison. Sans possibilité d'organiser la pose de la PTU et le pouvoir de celle-ci.
Partie serre:
- Prenez la température / humidité avec le capteur DHT-11 en utilisant pro micro
- Envoyer FS1000A avec Pro Micro
Partie d'origine:
- Accepter les valeurs sur mx-rm-5v avec Uno
- Envoyer au serveur à l'aide du blindage Ethernet (WIZNET W5100
HR911105A ) - Ecrire dans la base de données mysql
- Dessiner un graphique (jpgraph)

Il a commencé un peu en panne. Pour moi, cette séquence était plus compliquée, j'ai donc décidé de l'implémenter en premier.
La liste des packages requis n'est pas énorme et dépend de la distribution, à savoir nginx, php-gd, php-mysql, mysql-server. Pour jpgraph, vous aurez peut-être besoin de polices ttf.
Préparer nginxserver { listen 80; listen [::]:80; root /var/www/html; location / { } location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Pour uno, nous avons besoin des bibliothèques suivantes:
SPI.h
Ethernet.h
DHT.h
Code pour UNO #include <SPI.h> #include <Ethernet.h> #include <DHT.h> // MAC address for controller byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // byte ip[] = { 192, 168, 156, 192 }; // byte subnet[] = { 255, 255, 255, 0 }; // byte gateway[] = { 192, 168, 0, 1 }; // char server[] = "192.168.156.186"; #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); // EthernetClient client; void setup() { dht.begin(); Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect } { Ethernet.begin(mac,ip,gateway,subnet); } // give the Ethernet shield a second to initialize delay(1000); } void loop() { if (client.connect(server, 80)) { // give the Ethernet shield a second to initialize float h = dht.readHumidity(); float t = dht.readTemperature(); Serial.println("connected"); // GET client.println(String("GET /index.php?temp=")+ t +"&hum="+h); client.println(); Serial.println("connection close"); } else Serial.println("connection failed"); delay(60000); }
L'esquisse envoie une requête GET au script (index.php) toutes les minutes:
index.php <?php /** * @param string $message * @param PDOException|null $exception */ function writeMessage($message, $exception = null) { $logfile = '/var/www/html/data/arduino.log'; $datetime = date('dmY H:i:s', time()); if ($exception !== null) { $message .= ': ' . $exception->getFile() . ' (line: ' . $exception->getLine() . ') - ' . $exception->getMessage(); } file_put_contents($logfile, '[' . $datetime . '] ' . $message."\n", FILE_APPEND); } /* MySQL */ $dsn = 'mysql:dbname=greenhouse;host=localhost'; $user = 'arduino'; $password = ''; try { $dbh = new PDO($dsn, $user, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', ]); } catch (PDOException $e) { writeMessage(' ', $e); } try { $sth = $dbh->prepare('INSERT INTO data (sensor, temperature, humidity, created_at) VALUES (?, ?, ?, NOW())'); $sth->execute(['grass', $_REQUEST['temp'], $_REQUEST['hum']]); } catch (PDOException $e) { writeMessage(' ', $e); }
qui à son tour envoie des valeurs à la base de données:
Création de table CREATE DATABASE `greenhouse` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE TABLE `table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sensor` varchar(255) DEFAULT NULL, `temperature` decimal(6,3) DEFAULT '0.00', `humidity` decimal(6,3) DEFAULT '0.00', `created_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
Ajouter un utilisateur et accorder des droits CREATE USER 'arduino'@''' IDENTIFIED BY '';
GRANT ALL PRIVILEGES ON * . * TO 'arduino'@'';
FLUSH PRIVILEGES;
Nous vérifions:
select * from data;
+-----+--------+-------------+----------+---------------------+ | id | sensor | temperature | humidity | created_at | +-----+--------+-------------+----------+---------------------+ | 1 | grass | NULL | NULL | 2019-07-15 13:29:13 | | 2 | grass | 24.100 | 49.000 | 2019-07-15 13:44:44 | | 3 | grass | 24.100 | 49.000 | 2019-07-15 13:44:54 | | 4 | grass | 24.000 | 49.000 | 2019-07-15 13:45:04 | | 5 | grass | 24.000 | 49.000 | 2019-07-15 13:45:15 | | 6 | grass | 24.100 | 49.000 | 2019-07-15 13:45:25 | | 7 | grass | 24.100 | 49.000 | 2019-07-15 13:45:35 | | 8 | grass | 24.100 | 49.000 | 2019-07-15 13:45:45 | | 9 | grass | 24.100 | 49.000 | 2019-07-15 13:45:55 | | 10 | grass | 24.100 | 48.000 | 2019-07-15 13:46:47 | | 11 | grass | 24.100 | 48.000 | 2019-07-15 13:46:58 | | 12 | grass | 24.100 | 48.000 | 2019-07-15 13:47:08 |
Données dans la base de données!
Installez la bibliothèque
JpGraphsupprimez-le dans / var / www / src
Dessinez maintenant le graphique (day.php):
Nous obtenons une telle beauté:

C'est tout pour l'instant. Maintenant, je travaille sur la mise en place d'un paquet de deux cartes sur un canal radio, dont je parlerai dans la deuxième partie.