1808 lines
78 KiB
HTML
1808 lines
78 KiB
HTML
<!--
|
||
title: Linux Lamp
|
||
description:
|
||
published: 1
|
||
date: 2024-02-01T23:17:04.906Z
|
||
tags:
|
||
editor: code
|
||
dateCreated: 2024-02-01T23:17:04.906Z
|
||
-->
|
||
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
|
||
<title></title>
|
||
<meta name="generator" content="LibreOffice 7.3.7.2 (Linux)"/>
|
||
<meta name="created" content="2020-12-11T19:06:01.168136779"/>
|
||
<meta name="changed" content="2021-05-19T20:15:49.332532993"/>
|
||
<style type="text/css">
|
||
@page { size: 8.5in 11in; margin: 0.79in }
|
||
p { line-height: 115%; margin-bottom: 0.1in; background: transparent }
|
||
h2 { margin-top: 0.14in; margin-bottom: 0.08in; background: transparent; page-break-after: avoid }
|
||
h2.western { font-family: "Liberation Serif", serif; font-size: 18pt; font-weight: bold }
|
||
h2.cjk { font-family: "Noto Serif CJK SC"; font-size: 18pt; font-weight: bold }
|
||
h2.ctl { font-family: "Lohit Devanagari"; font-size: 18pt; font-weight: bold }
|
||
h1 { margin-bottom: 0.08in; background: transparent; page-break-after: avoid }
|
||
h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt; font-weight: bold }
|
||
h1.cjk { font-family: "Noto Sans CJK SC"; font-size: 18pt; font-weight: bold }
|
||
h1.ctl { font-family: "Lohit Devanagari"; font-size: 18pt; font-weight: bold }
|
||
a:link { color: #000080; so-language: zxx; text-decoration: underline }
|
||
code.western { font-family: "Liberation Mono", monospace }
|
||
code.cjk { font-family: "Noto Sans Mono CJK SC", monospace }
|
||
code.ctl { font-family: "Liberation Mono", monospace }
|
||
a:visited { color: #800000; so-language: zxx; text-decoration: underline }
|
||
</style>
|
||
</head>
|
||
<body lang="en-US" link="#000080" vlink="#800000" dir="ltr">
|
||
<div title="header"><p style="line-height: 100%; margin-bottom: 0.2in">
|
||
<br/>
|
||
|
||
</p>
|
||
</div><p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">enabling
|
||
SSH</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://randomnerdtutorials.com/installing-raspbian-lite-enabling-and-connecting-with-ssh/">https://randomnerdtutorials.com/installing-raspbian-lite-enabling-and-connecting-with-ssh/</a></code></p>
|
||
<ul>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">add
|
||
file “ssh” into boot folder</code></p>
|
||
</ul>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Establishing
|
||
an SSH Communication</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo ssh <a href="mailto:pi@192.168.178.25">pi@192.168.178.25</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">user:
|
||
pi, pass: pi</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Shutting
|
||
Down</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo poweroff</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://randomnerdtutorials.com/raspberry-pi-apache-mysql-php-lamp-server/">https://randomnerdtutorials.com/raspberry-pi-apache-mysql-php-lamp-server/</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://www.instructables.com/Installing-LAMP-Linux-Apache-MySQL-PHP-on-a-Raspbe/">https://www.instructables.com/Installing-LAMP-Linux-Apache-MySQL-PHP-on-a-Raspbe/</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Updating
|
||
and Upgrading</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo apt update && sudo apt upgrade -y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Install
|
||
Apache2</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo apt install apache2 -y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Testing
|
||
Apache installation</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd /var/www/html</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
ls -al</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">This
|
||
should show “index.html”</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">get
|
||
RasPi IP address</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
hostname -I</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">enter
|
||
IP address into Browser → the Apache Debian page should appear</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Install
|
||
PHP</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd /var/www/html</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo apt install php -y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo rm index.html</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo nano index.php</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Add
|
||
following script into the php file:</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><?php
|
||
echo "hello world"; ?></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Save
|
||
with Ctrl+X >> y >> Enter, </code><code class="western">or
|
||
Ctrl+O >> Enter >> Ctrl+X</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">OR</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><?php
|
||
phpinfo(); ?></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">OR</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
echo "<?php phpinfo ();?>" >
|
||
/var/www/html/index.php</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Restart
|
||
Apache</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo service apache2 restart</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">test
|
||
if Apache2 is serving .php files by opening RasPi IP address in
|
||
browser </code>
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">if
|
||
all is fine, index.php can be removed</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo rm index.php</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Install
|
||
MySQL (MariaDB Server)</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo apt install mariadb-server php-mysql -y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo service apache2 restart</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo mysql_secure_installation</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">In
|
||
all cases, answer with y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">create
|
||
new user “</code><code class="western">admin” with password
|
||
“</code><code class="western">your_password”</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo mysql --user=root --password</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>
|
||
create user admin@localhost identified by 'your_password';</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>
|
||
grant all privileges on *.* to admin@localhost;</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>
|
||
FLUSH PRIVILEGES;</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>
|
||
exit;</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Important
|
||
to generate user that is not limited to a certain domain!!</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>
|
||
</code><code class="western">grant all privileges on *.* to
|
||
'admin3'@'%';</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Install
|
||
phpMyAdmin</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd /var/www/html</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo apt install phpmyadmin -y</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Options:</code></p>
|
||
<ul>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">dbconfig-common</code></p>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">Apache2</code></p>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">Configuring
|
||
phpmyadmin? OK</code></p>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">Configure
|
||
database for phpmyadmin with dbconfig-common? Yes</code></p>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">Password:
|
||
pi</code></p>
|
||
</ul>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo phpenmod mysqli</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo service apache2 restart</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">open
|
||
following address</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><a name="__DdeLink__164_1253080105"></a>
|
||
<code class="western">http://192.168.</code><code class="western">178.25</code><code class="western">/phpmyadmin</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">if
|
||
“Not Found”</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd /var/www/html</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
ls</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">>>
|
||
</code><code class="western">phpmyadmin</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">again,
|
||
open following address</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="http://192.168.178.25/phpmyadmin">http://192.168.178.25/phpmyadmin</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">login
|
||
with username=root, password=pi</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">change
|
||
the permissions for your /var/www/html/ folder.</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd ~</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
ls -lh /var/www/</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo chown -R pi:www-data /var/www/html/</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo chmod -R 770 /var/www/html/</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
ls -lh /var/www/</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/">https://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Create
|
||
database:</code></p>
|
||
<ul>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">esp_data</code></p>
|
||
<li><p style="line-height: 100%; margin-bottom: 0in"><code class="western">utf8mb4_general_ci</code></p>
|
||
</ul>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Create
|
||
table by calling SQL query:</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">CREATE
|
||
TABLE SensorData (</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">id INT(6) UNSIGNED AUTO_INCREMENT
|
||
PRIMARY KEY,</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">sensor VARCHAR(30) NOT NULL,</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">location VARCHAR(30) NOT NULL,</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">value1 VARCHAR(10),</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">value2 VARCHAR(10),</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">value3 VARCHAR(10),</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">
|
||
</code><code class="western">reading_time TIMESTAMP DEFAULT
|
||
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">)</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">PHP
|
||
script that is responsible for receiving incoming requests from the
|
||
ESP32 or ESP8266 and inserting the data into a MySQL database.</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
cd ~</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">nano /var/www/html/post-esp-data.php</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://github.com/ChuckBell/MySQL_Connector_Arduino/wiki/Troubleshooting">https://github.com/ChuckBell/MySQL_Connector_Arduino/wiki/Troubleshooting</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">tr
|
||
to connect to msql from another computer:</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">mysql -u</code><code class="western">admin</code><code class="western">
|
||
-p</code><code class="western"><font face="Liberation Mono, monospace">pi</font></code><code class="western">
|
||
–h192.168.178.25 –port=3306</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">mysql --u</code><code class="western">ser=</code><code class="western">admin</code><code class="western">
|
||
--p</code><code class="western">assword=</code><code class="western"><font face="Liberation Mono, monospace">pi</font></code><code class="western">
|
||
--h</code><code class="western">ost=</code><code class="western">192.168.178.25
|
||
--port=3306</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">mysql --u</code><code class="western">ser=</code><code class="western">admin</code><code class="western">
|
||
--p</code><code class="western">assword=</code><code class="western"><font face="Liberation Mono, monospace">pi</font></code><code class="western">
|
||
--h</code><code class="western">ost= 127.0.0.1</code><code class="western">
|
||
--port=3306</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">mysql -u </code><code class="western"><font face="Liberation Mono, monospace">admin</font></code><code class="western">
|
||
-p </code><code class="western"><font face="Liberation Mono, monospace">pi</font></code><code class="western">
|
||
-h 127.0.0.1 test_arduino</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Important
|
||
in case of “ERROR 2003 (HY000): Can't connect to local MySQL server
|
||
through socket”</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf </code>
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">Here,
|
||
the binding address = 127.0.0.1 must be commented out!!!</code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western"><a href="https://pawelrychlicki.pl/Article/Details/65/fixing-sqlstatehy000-2002-in-the-nextcloudowncloud-with-the-mysqlmariadb-and-the-tlsssl-ubuntu-linux-1804-server">https://pawelrychlicki.pl/Article/Details/65/fixing-sqlstatehy000-2002-in-the-nextcloudowncloud-with-the-mysqlmariadb-and-the-tlsssl-ubuntu-linux-1804-server</a></code></p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<h1 class="western">1<code class="western">Configuring WiFi in
|
||
headless mode</code></h1>
|
||
<p><code class="western"><a href="https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md">https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md</a></code></p>
|
||
<p><code class="western"><a href="https://www.seeedstudio.com/blog/2021/01/25/three-methods-to-configure-raspberry-pi-wifi/">https://www.seeedstudio.com/blog/2021/01/25/three-methods-to-configure-raspberry-pi-wifi/</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">1.1<code class="western">ssh</code></h2>
|
||
<p><code class="western">To enable SSH on a headless Raspberry Pi,
|
||
simply place a file named “ssh”, without any extension, onto the
|
||
boot partition of the SD card from another computer. This will tell
|
||
Raspberry Pi to enable SSH when booting. The content of the file does
|
||
not matter.</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">1.2<code class="western">wpa_supplicant.conf </code>
|
||
</h2>
|
||
<p><code class="western">$ </code><code class="western">sudo nano
|
||
/etc/wpa_supplicant/wpa_supplicant.conf</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">ctrl_interface=DIR=/var/run/wpa_supplicant
|
||
GROUP=netdev</code></p>
|
||
<p><code class="western">update_config=1</code></p>
|
||
<p><code class="western">country=</code><code class="western"><span style="background: #ffff00"><Country
|
||
Code></span></code></p>
|
||
<p><code class="western">network={</code></p>
|
||
<p><code class="western"> </code><code class="western">ssid="</code><code class="western"><span style="background: #ffff00"><SSID></span></code><code class="western">"</code></p>
|
||
<p><code class="western"> </code><code class="western">psk="</code><code class="western"><span style="background: #ffff00"><PASSWORD></span></code><code class="western">"</code></p>
|
||
<p><code class="western"> </code><code class="western">scan_ssid=1</code></p>
|
||
<p><code class="western">}</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">2<code class="western">Arduino script for writing
|
||
to MariaDB/MySQL database</code></h1>
|
||
<p><code class="western">Check sketch “Complex_Insert_WiFi_BE”</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">3<code class="western">Showing DB content as html
|
||
page</code></h1>
|
||
<p><code class="western"><a href="https://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/">https://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$ nano /var/www/html/esp-data.php</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">open page http://192.168.178.25/esp-data.php</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">3.1<code class="western">esp-data.php</code></h2>
|
||
<p><code class="western"><!DOCTYPE html></code></p>
|
||
<p><code class="western"><html><body></code></p>
|
||
<p><code class="western"><?php</code></p>
|
||
<p><code class="western">/*</code></p>
|
||
<p><code class="western"> </code><code class="western">Rui Santos</code></p>
|
||
<p><code class="western"> </code><code class="western">Complete
|
||
project details at
|
||
https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">Permission is
|
||
hereby granted, free of charge, to any person obtaining a copy</code></p>
|
||
<p><code class="western"> </code><code class="western">of this
|
||
software and associated documentation files.</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">The above
|
||
copyright notice and this permission notice shall be included in all</code></p>
|
||
<p><code class="western"> </code><code class="western">copies or
|
||
substantial portions of the Software.</code></p>
|
||
<p><code class="western">*/</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$servername = "</code><code class="western"><span style="background: #ffff00">192.168.178.25</span></code><code class="western">";</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">// REPLACE with your Database name</code></p>
|
||
<p><code class="western">$dbname = "</code><code class="western"><span style="background: #ffff00">test_arduino</span></code><code class="western">";</code></p>
|
||
<p><code class="western">// REPLACE with Database user</code></p>
|
||
<p><code class="western"><span style="background: transparent">$username
|
||
= "</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">admin3</span></font></code><code class="western"><span style="background: transparent">";</span></code></p>
|
||
<p><code class="western"><span style="background: transparent">//
|
||
REPLACE with Database user password</span></code></p>
|
||
<p><code class="western"><span style="background: transparent">$password
|
||
= "</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">pi</span></font></code><code class="western"><span style="background: transparent">";</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">// Create connection</code></p>
|
||
<p><code class="western">$conn = new mysqli($servername, $username,
|
||
$password, $dbname);</code></p>
|
||
<p><code class="western">// Check connection</code></p>
|
||
<p><code class="western">if ($conn->connect_error) {</code></p>
|
||
<p><code class="western"> </code><code class="western">die("Connection
|
||
failed: " . $conn->connect_error);</code></p>
|
||
<p><code class="western">} </code>
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$sql = "SELECT </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><span style="background: #ffff00">message,
|
||
</span></code><code class="western"><span style="background: #ffff00">sensor_</span></code><code class="western"><span style="background: #ffff00">num</span></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">value</span></font></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">
|
||
FROM </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">hello_sensor</span></font></code><code class="western">
|
||
ORDER BY </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">
|
||
DESC";</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">echo '<table cellspacing="5"
|
||
cellpadding="5"></code></p>
|
||
<p><code class="western"> </code><code class="western"><tr>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western"></td>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">message</span></font></code><code class="western"></td>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">sensor</span></font></code><code class="western"><font face="Liberation Mono, monospace">_num</font></code><code class="western"></td>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">v</span></font></code><code class="western"><span style="background: #ffff00">alue</span></code><code class="western"></td>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western"></td>
|
||
</code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"></tr>';</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western">if ($result = $conn->query($sql)) {</code></p>
|
||
<p><code class="western"> </code><code class="western">while ($row
|
||
= $result->fetch_assoc()) {</code></p>
|
||
<p><code class="western"> </code><code class="western">$row_</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">
|
||
= $row["</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">"];</code></p>
|
||
<p><code class="western"> </code><code class="western">$row_</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">message</span></font></code><code class="western">
|
||
= $row["</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">message</span></font></code><code class="western">"];</code></p>
|
||
<p><code class="western"> </code><code class="western">$row_</code><code class="western"><span style="background: #ffff00">sensor_num</span></code><code class="western">
|
||
= $row["</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">sensor_num</span></font></code><code class="western">"];</code></p>
|
||
<p><code class="western"> </code><code class="western">$row_</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">
|
||
= $row["</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">"];</code></p>
|
||
<p><code class="western"> </code><code class="western">$row_</code><code class="western"><span style="background: #ffff00">re</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">corded</span></font></code><code class="western">
|
||
= $row["</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">"];</code></p>
|
||
<p><code class="western"> </code><code class="western">//
|
||
Uncomment to set timezone to - 1 hour (you can change 1 to any
|
||
number)</code></p>
|
||
<p><code class="western"> </code><code class="western">//$row_reading_time
|
||
= date("Y-m-d H:i:s", strtotime("$row_reading_time - 1
|
||
hours"));</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">//
|
||
Uncomment to set timezone to + 4 hours (you can change 4 to any
|
||
number)</code></p>
|
||
<p><code class="western"> </code><code class="western">//$row_reading_time
|
||
= date("Y-m-d H:i:s", strtotime("$row_reading_time + 4
|
||
hours"));</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">echo
|
||
'<tr> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td>'
|
||
. $row_</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">
|
||
. '</td> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td>'
|
||
. $row_</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">message</span></font></code><code class="western">
|
||
. '</td> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td>'
|
||
. $row_</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">sensor_</span></font></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">
|
||
. '</td> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td>'
|
||
. $row_</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">
|
||
. '</td> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"><td>'
|
||
. $row_</code><code class="western"><span style="background: #ffff00">r</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">ecorded</span></font></code><code class="western">
|
||
. '</td> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western"></tr>';</code></p>
|
||
<p><code class="western"> </code><code class="western">}</code></p>
|
||
<p><code class="western"> </code><code class="western">$result->free();</code></p>
|
||
<p><code class="western">}</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$conn->close();</code></p>
|
||
<p><code class="western">?> </code>
|
||
</p>
|
||
<p><code class="western"></table></code></p>
|
||
<p><code class="western"></body></code></p>
|
||
<p><code class="western"></html></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">4<code class="western">Plotting of data from
|
||
</code><code class="western">MariaDB/MySQL database</code></h1>
|
||
<p><code class="western"><a href="https://randomnerdtutorials.com/visualize-esp32-esp8266-sensor-readings-from-anywhere/">https://randomnerdtutorials.com/visualize-esp32-esp8266-sensor-readings-from-anywhere/</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$ </code><code class="western">sudo nano
|
||
/var/www/html/esp-</code><code class="western">chart</code><code class="western">.php</code></p>
|
||
<h2 class="western">4.1<code class="western">esp-chart.php</code></h2>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><!--</code></p>
|
||
<p><code class="western"> </code><code class="western">Rui Santos</code></p>
|
||
<p><code class="western"> </code><code class="western">Complete
|
||
project details at https://RandomNerdTutorials.com</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">Permission is
|
||
hereby granted, free of charge, to any person obtaining a copy</code></p>
|
||
<p><code class="western"> </code><code class="western">of this
|
||
software and associated documentation files.</code></p>
|
||
<p><code class="western"> </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">The above
|
||
copyright notice and this permission notice shall be included in all</code></p>
|
||
<p><code class="western"> </code><code class="western">copies or
|
||
substantial portions of the Software.</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">--></code></p>
|
||
<p><code class="western"><?php</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$servername = "</code><code class="western"><span style="background: #ffff00">192.168.178.25</span></code><code class="western">";</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">// REPLACE with your Database name</code></p>
|
||
<p><code class="western">$dbname = "</code><code class="western"><span style="background: #ffff00">test_arduino</span></code><code class="western">";</code></p>
|
||
<p><code class="western">// REPLACE with Database user</code></p>
|
||
<p><code class="western"><span style="background: transparent">$username
|
||
= "</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">admin3</span></font></code><code class="western"><span style="background: transparent">";</span></code></p>
|
||
<p><code class="western"><span style="background: transparent">//
|
||
REPLACE with Database user password</span></code></p>
|
||
<p><code class="western"><span style="background: transparent">$password
|
||
= "</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">pi</span></font></code><code class="western"><span style="background: transparent">";</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">// Create connection</code></p>
|
||
<p><code class="western">$conn = new mysqli($servername, $username,
|
||
$password, $dbname);</code></p>
|
||
<p><code class="western">// Check connection</code></p>
|
||
<p><code class="western">if ($conn->connect_error) {</code></p>
|
||
<p><code class="western"> </code><code class="western">die("Connection
|
||
failed: " . $conn->connect_error);</code></p>
|
||
<p><code class="western">} </code>
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$sql = "SELECT </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><span style="background: #ffff00">message,
|
||
</span></code><code class="western"><span style="background: #ffff00">sensor_</span></code><code class="western"><span style="background: #ffff00">num</span></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">value,
|
||
</span></font></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">value_h</span></font></code><code class="western"><span style="background: #ffff00">,
|
||
</span></code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">
|
||
FROM </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">hello_sensor
|
||
</span></font></code><code class="western"><span style="background: #ffff00">WHERE
|
||
sensor_num = 0</span></code><code class="western"> ORDER BY </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">num</span></font></code><code class="western">
|
||
DESC limit 40";</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$result = $conn->query($sql);</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">while ($data = $result->fetch_assoc()){</code></p>
|
||
<p><code class="western"> </code><code class="western">$sensor_data[]
|
||
= $data;</code></p>
|
||
<p><code class="western">}</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">
|
||
= array_column($sensor_data, '</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">');</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">// ******* Uncomment to convert readings
|
||
time array to your timezone ********</code></p>
|
||
<p><code class="western">/*$i = 0;</code></p>
|
||
<p><code class="western">foreach ($readings_time as $reading){</code></p>
|
||
<p><code class="western"> </code><code class="western">//
|
||
Uncomment to set timezone to - 1 hour (you can change 1 to any
|
||
number)</code></p>
|
||
<p><code class="western"> </code><code class="western">$readings_time[$i]
|
||
= date("Y-m-d H:i:s", strtotime("$reading - 1
|
||
hours"));</code></p>
|
||
<p><code class="western"> </code><code class="western">//
|
||
Uncomment to set timezone to + 4 hours (you can change 4 to any
|
||
number)</code></p>
|
||
<p><code class="western"> </code><code class="western">//$readings_time[$i]
|
||
= date("Y-m-d H:i:s", strtotime("$reading + 4
|
||
hours"));</code></p>
|
||
<p><code class="western"> </code><code class="western">$i += 1;</code></p>
|
||
<p><code class="western">}*/</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">
|
||
= json_encode(array_reverse(array_column($sensor_data, '</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">')),
|
||
JSON_NUMERIC_CHECK);</code></p>
|
||
<p><code class="western">$</code><code class="western"><span style="background: #ffff00">value_</span></code><code class="western"><span style="background: #ffff00">h</span></code><code class="western">
|
||
= json_encode(array_reverse(array_column($sensor_data, '</code><code class="western"><span style="background: #ffff00">value_</span></code><code class="western"><span style="background: #ffff00">h</span></code><code class="western">')),
|
||
JSON_NUMERIC_CHECK);</code></p>
|
||
<p><code class="western">$</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">
|
||
= json_encode(array_reverse($</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">),
|
||
JSON_NUMERIC_CHECK);</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">/*echo $value1;</code></p>
|
||
<p><code class="western">echo $value2;</code></p>
|
||
<p><code class="western">echo $value3;</code></p>
|
||
<p><code class="western">echo $reading_time;*/</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$result->free();</code></p>
|
||
<p><code class="western">$conn->close();</code></p>
|
||
<p><code class="western">?></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><!DOCTYPE html></code></p>
|
||
<p><code class="western"><html></code></p>
|
||
<p><code class="western"><meta name="viewport"
|
||
content="width=device-width, initial-scale=1"></code></p>
|
||
<p><code class="western"> </code><code class="western"><script
|
||
src="https://code.highcharts.com/highcharts.js"></script></code></p>
|
||
<p><code class="western"> </code><code class="western"><style></code></p>
|
||
<p><code class="western"> </code><code class="western">body {</code></p>
|
||
<p><code class="western"> </code><code class="western">min-width:
|
||
310px;</code></p>
|
||
<p><code class="western"> </code><code class="western"> max-width:
|
||
1280px;</code></p>
|
||
<p><code class="western"> </code><code class="western"> height:
|
||
500px;</code></p>
|
||
<p><code class="western"> </code><code class="western">margin: 0
|
||
auto;</code></p>
|
||
<p><code class="western"> </code><code class="western">}</code></p>
|
||
<p><code class="western"> </code><code class="western">h2 {</code></p>
|
||
<p><code class="western"> </code><code class="western">font-family:
|
||
Arial;</code></p>
|
||
<p><code class="western"> </code><code class="western">font-size:
|
||
2.5rem;</code></p>
|
||
<p><code class="western"> </code><code class="western">text-align:
|
||
center;</code></p>
|
||
<p><code class="western"> </code><code class="western">}</code></p>
|
||
<p><code class="western"> </code><code class="western"></style></code></p>
|
||
<p><code class="western"> </code><code class="western"><body></code></p>
|
||
<p><code class="western"> </code><code class="western"><h2>ESP
|
||
Weather Station</h2></code></p>
|
||
<p><code class="western"> </code><code class="western"><div
|
||
id="chart-temperature" class="container"></div></code></p>
|
||
<p><code class="western"> </code><code class="western"><div
|
||
id="chart-humidity" class="container"></div></code></p>
|
||
<p><code class="western"><script></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">var </code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">
|
||
= <?php echo $</code><code class="western"><span style="background: #ffff00">value</span></code><code class="western">;
|
||
?>;</code></p>
|
||
<p><code class="western">var </code><code class="western"><span style="background: #ffff00">value_</span></code><code class="western"><span style="background: #ffff00">h</span></code><code class="western">
|
||
= <?php echo $</code><code class="western"><span style="background: #ffff00">value_</span></code><code class="western"><span style="background: #ffff00">h</span></code><code class="western">;
|
||
?>;</code></p>
|
||
<p><code class="western">var </code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">
|
||
= <?php echo $</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code><code class="western">;
|
||
?>;</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">var chartT = new Highcharts.Chart({</code></p>
|
||
<p><code class="western"> </code><code class="western">chart:{
|
||
renderTo : 'chart-temperature' },</code></p>
|
||
<p><code class="western"> </code><code class="western">title: {
|
||
text: 'BME280 Temperature' },</code></p>
|
||
<p><code class="western"> </code><code class="western">series: [{</code></p>
|
||
<p><code class="western"> </code><code class="western">showInLegend:
|
||
false,</code></p>
|
||
<p><code class="western"> </code><code class="western">data: </code><code class="western"><span style="background: #ffff00">value</span></code></p>
|
||
<p><code class="western"> </code><code class="western">}],</code></p>
|
||
<p><code class="western"> </code><code class="western">plotOptions:
|
||
{</code></p>
|
||
<p><code class="western"> </code><code class="western">line: {
|
||
animation: false,</code></p>
|
||
<p><code class="western"> </code><code class="western">dataLabels:
|
||
{ enabled: true }</code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">series: {
|
||
color: '#059e8a' }</code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">xAxis: { </code>
|
||
</p>
|
||
<p><code class="western"> </code><code class="western">type:
|
||
'datetime',</code></p>
|
||
<p><code class="western"> </code><code class="western">categories:
|
||
</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">yAxis: {</code></p>
|
||
<p><code class="western"> </code><code class="western">title: {
|
||
text: 'Temperature (Celsius)' }</code></p>
|
||
<p><code class="western"> </code><code class="western">//title: {
|
||
text: 'Temperature (Fahrenheit)' }</code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">credits: {
|
||
enabled: false }</code></p>
|
||
<p><code class="western">});</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">var chartH = new Highcharts.Chart({</code></p>
|
||
<p><code class="western"> </code><code class="western">chart:{
|
||
renderTo:'chart-humidity' },</code></p>
|
||
<p><code class="western"> </code><code class="western">title: {
|
||
text: 'BME280 Humidity' },</code></p>
|
||
<p><code class="western"> </code><code class="western">series: [{</code></p>
|
||
<p><code class="western"> </code><code class="western">showInLegend:
|
||
false,</code></p>
|
||
<p><code class="western"> </code><code class="western">data:
|
||
</code><code class="western"><span style="background: #ffff00">value_</span></code><code class="western"><span style="background: #ffff00">h</span></code></p>
|
||
<p><code class="western"> </code><code class="western">}],</code></p>
|
||
<p><code class="western"> </code><code class="western">plotOptions:
|
||
{</code></p>
|
||
<p><code class="western"> </code><code class="western">line: {
|
||
animation: false,</code></p>
|
||
<p><code class="western"> </code><code class="western">dataLabels:
|
||
{ enabled: true }</code></p>
|
||
<p><code class="western"> </code><code class="western">}</code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">xAxis: {</code></p>
|
||
<p><code class="western"> </code><code class="western">type:
|
||
'datetime',</code></p>
|
||
<p><code class="western"> </code><code class="western">//dateTimeLabelFormats:
|
||
{ second: '%H:%M:%S' },</code></p>
|
||
<p><code class="western"> </code><code class="western">categories:
|
||
</code><code class="western"><font face="Liberation Mono, monospace"><span style="background: #ffff00">recorded</span></font></code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">yAxis: {</code></p>
|
||
<p><code class="western"> </code><code class="western">title: {
|
||
text: 'Humidity (%)' }</code></p>
|
||
<p><code class="western"> </code><code class="western">},</code></p>
|
||
<p><code class="western"> </code><code class="western">credits: {
|
||
enabled: false }</code></p>
|
||
<p><code class="western">});</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"></script></code></p>
|
||
<p><code class="western"></body></code></p>
|
||
<p><code class="western"></html></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">5<code class="western">Using canvas.js</code></h1>
|
||
<p><code class="western"><a href="https://canvasjs.com/php-charts/multiseries-chart/">https://canvasjs.com/php-charts/multiseries-chart/</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">6<code class="western">External access to LAMP
|
||
server</code></h1>
|
||
<p><code class="western">port 22 (ssh), port 80 (http)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://raspberrypi.stackexchange.com/questions/105080/how-to-remote-to-raspberry-pi-from-outside-local-network">https://raspberrypi.stackexchange.com/questions/105080/how-to-remote-to-raspberry-pi-from-outside-local-network</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://howtoraspberrypi.com/enable-mysql-remote-connection-raspberry-pi/">https://howtoraspberrypi.com/enable-mysql-remote-connection-raspberry-pi/</a></code></p>
|
||
<p><code class="western">Configure MySQL to accept external
|
||
connections to Raspberry Pi</code></p>
|
||
<p><code class="western">$ sudo nano /etc/mysql/my.cnf</code></p>
|
||
<p><code class="western">#bind-address = 127.0.0.1 </code><code class="western"><span style="background: #ffff00"><<<<<
|
||
comment the line bind-address</span></code></p>
|
||
<p><code class="western">optionall</code><code class="western">y
|
||
</code><code class="western"><font face="Liberation Mono, monospace">m</font></code><code class="western">odify
|
||
the MySQL port </code><code class="western">to reduce risk of
|
||
attacks, e.g.</code></p>
|
||
<p><code class="western">port = 8457</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$ </code><code class="western">/etc/init.d/mysql
|
||
restart</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">7<code class="western">RasPi as Samba server</code></h1>
|
||
<p><code class="western"><a href="https://aallan.medium.com/adding-an-external-disk-to-a-raspberry-pi-and-sharing-it-over-the-network-5b321efce86a">https://aallan.medium.com/adding-an-external-disk-to-a-raspberry-pi-and-sharing-it-over-the-network-5b321efce86a</a></code></p>
|
||
<p><code class="western">SMB is the best protocol for use on multiple
|
||
platforms due to superior interoperability</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">in case of issue “chown: changing
|
||
ownership of '...': Operation not permitted”:</code></p>
|
||
<p><code class="western"><a href="https://stackoverflow.com/questions/25559700/chown-command-returning-operation-not-permitted">https://stackoverflow.com/questions/25559700/chown-command-returning-operation-not-permitted</a></code></p>
|
||
<p><code class="western">get uid:</code></p>
|
||
<p><code class="western">$ cat /etc/passwd |grep pi</code></p>
|
||
<p><code class="western">get gid:</code></p>
|
||
<p><code class="western">$ </code><code class="western">cat
|
||
/etc/group |grep pi</code></p>
|
||
<p><code class="western">Give pi:pi access to the entire /</code><code class="western">mnt/usb</code><code class="western">
|
||
mount:</code></p>
|
||
<p><code class="western">$ sudo mount -o remount,gid=</code><code class="western"><span style="background: #ffff00"><pi's
|
||
gid></span></code><code class="western">,uid=</code><code class="western"><span style="background: #ffff00"><pi's
|
||
uid></span></code><code class="western"> /mnt/usb</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">Attention: </code><code class="western">FAT
|
||
file system doesn't support such permissions, so they can't be
|
||
applied after the drive is mounted</code></p>
|
||
<p><code class="western"><a href="https://raspberrypi.stackexchange.com/questions/40408/how-to-change-permissions-on-external-hard-drive-connected-to-raspberry">https://raspberrypi.stackexchange.com/questions/40408/how-to-change-permissions-on-external-hard-drive-connected-to-raspberry</a></code></p>
|
||
<p><code class="western">Instead, drive should be formatted with pi
|
||
user </code><code class="western">and/or ntfs file sstem</code><code class="western">?</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">Mounting USB drive </code><code class="western">that
|
||
is</code><code class="western"><b> </b></code><code class="western"><b>NTFS</b></code><code class="western"><b>???-</b></code><code class="western">formatted</code><code class="western">
|
||
under specific name:</code></p>
|
||
<p><code class="western">$ </code><code class="western"><font face="Liberation Mono, monospace">sudo
|
||
</font></code><code class="western">fdisk -l</code></p>
|
||
<p><code class="western">$ sudo umount </code><code class="western"><span style="background: #ffff00">/dev/sda1</span></code></p>
|
||
<p><code class="western">$ sudo mkdir /mnt/usb</code></p>
|
||
<p><code class="western">$ sudo chown -R pi:pi /mnt/usb</code></p>
|
||
<p><code class="western">seems like this command has to be used each
|
||
time the usb drive is connected: </code><code class="western">$ </code><code class="western"><span style="background: transparent">sudo
|
||
mount /dev/sda1 /mnt/usb -o uid=pi,gid=pi</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">append following text to this file for
|
||
automatic mounting under the specified path:</code></p>
|
||
<p><code class="western">$ sudo nano </code><code class="western">/etc/fstab</code></p>
|
||
<p><code class="western">/dev/sda1 /mnt/usb auto defaults,user 0 1</code></p>
|
||
<p><code class="western">OR:</code></p>
|
||
<p><code class="western">/dev/sda1 /mnt/usb </code><code class="western"><span style="background: #ffff00">ntfs-3g</span></code><code class="western">
|
||
defaults,user,uid=</code><code class="western"><span style="background: #ffff00">1000</span></code><code class="western">,gid=</code><code class="western"><span style="background: #ffff00">1000</span></code><code class="western">,noatime 0 0</code></p>
|
||
<p><code class="western"><a href="https://raspberrypi.stackexchange.com/questions/40408/how-to-change-permissions-on-external-hard-drive-connected-to-raspberry">https://raspberrypi.stackexchange.com/questions/40408/how-to-change-permissions-on-external-hard-drive-connected-to-raspberry</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">Make the drive accessible from the network
|
||
</code><code class="western">by adding following text</code><code class="western">:</code></p>
|
||
<p><code class="western">$ sudo apt-get install samba
|
||
samba-common-bin</code></p>
|
||
<p><code class="western">$ sudo nano /etc/samba/smb.conf</code></p>
|
||
<p><code class="western">[share]</code></p>
|
||
<p><code class="western">Comment</code><code class="western"><span style="background: #ffff00">
|
||
= Shared Folder</span></code></p>
|
||
<p><code class="western"><span style="background: #ffff00">Path =
|
||
/mnt/usb</span></code></p>
|
||
<p><code class="western">Browseable = yes</code></p>
|
||
<p><code class="western">Writeable = Yes</code></p>
|
||
<p><code class="western">only guest = no</code></p>
|
||
<p><code class="western">create mask = 0777</code></p>
|
||
<p><code class="western">directory mask = 0777</code></p>
|
||
<p><code class="western">Public = yes</code></p>
|
||
<p><code class="western">Guest ok = yes</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">$ chmod 1777 </code><code class="western"><span style="background: #ffff00">/mnt/usb
|
||
</span></code><code class="western"><b><span style="background: #ffff00"><<<<
|
||
the uSB should be mounted under this name</span></b></code></p>
|
||
<p><code class="western">$ sudo /etc/init.d/samba restart</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">sudo service smbd restart</code></p>
|
||
<p><code class="western">sudo service smbd status</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://www.raspberrypi.org/forums/viewtopic.php?t=56149">https://www.raspberrypi.org/forums/viewtopic.php?t=56149</a></code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo df</code></p>
|
||
<p><code class="western">$ </code><code class="western">cd /media</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo mkdir
|
||
HDD</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo nano
|
||
/etc/fstab</code></p>
|
||
<p><code class="western">/dev/sda1 /media/HDD ntfs-3g
|
||
defaults,noatime 0 0</code></p>
|
||
<p><code class="western">$ cp /etc/samba/smb.conf
|
||
/etc/samba/smb.conf.bak //Make a backup of the config file</code></p>
|
||
<p><code class="western">$ </code><code class="western">nano
|
||
/etc/samba/smb.conf</code></p>
|
||
<p><code class="western">[media] </code>
|
||
</p>
|
||
<p><code class="western">comment = Media share</code></p>
|
||
<p><code class="western">path = /media/HDD</code></p>
|
||
<p><code class="western">valid users = @users</code></p>
|
||
<p><code class="western">force group = users</code></p>
|
||
<p><code class="western">create mask = 0660</code></p>
|
||
<p><code class="western">directory mask = 0771</code></p>
|
||
<p><code class="western">read only = no</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">sudo service samba restart</code></p>
|
||
<p><code class="western">sudo useradd ChooseUsernameHere -m -G users</code></p>
|
||
<p><code class="western">sudo passwd TheChosenUsername //after this
|
||
choose a password for the new user</code></p>
|
||
<p><code class="western">sudo smbpasswd -a TheChosenUsername //after
|
||
this enter passwd again</code></p>
|
||
<p><code class="western">>>>>>>>>>>>
|
||
</code><code class="western"><span style="background: #ffff00">userA pi</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">mount in Win10/Linux/etc. </code><code class="western">a</code><code class="western">s
|
||
</code><code class="western">smb://192.</code><code class="western">1</code><code class="western">68.178.25/</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://raspberrytips.com/format-mount-usb-drive/">https://raspberrytips.com/format-mount-usb-drive/</a></code></p>
|
||
<p><code class="western">Formatting USB stick with RasPi:</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo fdisk -l</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo fdisk
|
||
/dev/sda</code><code class="western">1</code></p>
|
||
<p><code class="western"> </code><code class="western">Create a
|
||
new partition table : g (for GPT, use help for other format)</code></p>
|
||
<p><code class="western"> </code><code class="western">Create a
|
||
new partition : n</code></p>
|
||
<p><code class="western"> </code><code class="western">You can
|
||
keep the default values for a single partition</code></p>
|
||
<p><code class="western"> </code><code class="western">Confirm
|
||
with Y to remove the signature</code></p>
|
||
<p><code class="western"> </code><code class="western">And finally
|
||
write and exit fdisk: w</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo
|
||
mkfs.ext4 /dev/sda1<br/>
|
||
</code><code class="western">OR: $ </code><code class="western">sudo
|
||
mkfs.vfat /dev/sda1<br/>
|
||
</code><code class="western">OR: $ </code><code class="western"><span style="background: #ffff00">sudo
|
||
mkfs.ntfs /dev/sda1</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://thepihut.com/blogs/raspberry-pi-tutorials/17699796-formatting-and-mounting-a-usb-drive-from-a-terminal-window">https://thepihut.com/blogs/raspberry-pi-tutorials/17699796-formatting-and-mounting-a-usb-drive-from-a-terminal-window</a></code></p>
|
||
<p><code class="western"><font color="#444444"><span style="background: #ffffff">$
|
||
</span></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">sudo
|
||
mkfs -t vfat -I /dev/sd</span></font></code><code class="western"><font color="#444444"><font face="Liberation Mono, monospace"><span style="background: #ffffff">a</span></font></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">1</span></font></code></p>
|
||
<p><code class="western"><font color="#444444"><span style="background: #ffffff">$
|
||
</span></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">sudo
|
||
mount /dev/sd</span></font></code><code class="western"><font color="#444444"><font face="Liberation Mono, monospace"><span style="background: #ffffff">a</span></font></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">1
|
||
/</span></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">mnt/u</span></font></code><code class="western"><font color="#444444"><span style="font-style: normal"><span style="background: #ffffff">sb</span></span></font></code><code class="western"><font color="#444444"><span style="background: #ffffff">
|
||
-o umask=000</span></font></code></p>
|
||
<p><code class="western"><font color="#444444"><span style="background: #ffffff">$
|
||
sudo umount /mnt/usb</span></font></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">8<code class="western">Filtering rows with SQL</code></h1>
|
||
<p><code class="western"><a href="https://chartio.com/blog/simple-sql-filtering-rows/">https://chartio.com/blog/simple-sql-filtering-rows/</a></code></p>
|
||
<p><code class="western">SELECT column_name1, column_name2</code></p>
|
||
<p><code class="western">FROM table_name</code></p>
|
||
<p><code class="western">WHERE column_name1 operator value;</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><span style="background: #ffff00">SELECT *</span></code></p>
|
||
<p><code class="western"><span style="background: #ffff00">FROM
|
||
hello_sensor</span></code></p>
|
||
<p><code class="western"><span style="background: #ffff00">WHERE
|
||
sensor_num = 0 </span></code>
|
||
</p>
|
||
<p><code class="western"><span style="background: #ffff00">ORDER BY
|
||
`hello_sensor`.`recorded` DESC</span></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">9<code class="western">P</code><code class="western">ython
|
||
MySQL</code></h1>
|
||
<h2 class="western">9.1<code class="western">Python MySQL Querying
|
||
Data</code></h2>
|
||
<p><code class="western"><a href="https://stackoverflow.com/questions/44634810/fastest-way-to-fetch-table-from-mysql-into-pandas">https://stackoverflow.com/questions/44634810/fastest-way-to-fetch-table-from-mysql-into-pandas</a></code></p>
|
||
<p><code class="western">MyEngine=create_engine('[YourDatabase]://[User]:[Pass]@[Host]/[DatabaseName]',
|
||
echo = True)</code></p>
|
||
<p><code class="western"><b>Downloading:</b></code></p>
|
||
<p><code class="western">df = pd.read_sql_query('select * from
|
||
[TableName]', con= MyEngine)</code></p>
|
||
<p><code class="western"><b>Uploading:</b></code></p>
|
||
<p><code class="western">df.to_sql([TableName], MyEngine, if_exists =
|
||
'append', index=False)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">9.2<code class="western">Using </code><code class="western">mysql
|
||
</code><code class="western">module</code></h2>
|
||
<p><code class="western"><a href="https://www.mysqltutorial.org/python-mysql-query/">https://www.mysqltutorial.org/python-mysql-query/</a></code></p>
|
||
<p><code class="western"><a href="https://www.codespeedy.com/fetch-data-from-mysql-table-in-python-program/">https://www.codespeedy.com/fetch-data-from-mysql-table-in-python-program/</a></code></p>
|
||
<p><code class="western"><a href="https://www.krazyprogrammer.com/2020/11/fetch-and-display-data-from-mysql-using.html">https://www.krazyprogrammer.com/2020/11/fetch-and-display-data-from-mysql-using.html</a></code></p>
|
||
<p><code class="western">pip install mysql-connector</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://www.tutorialspoint.com/python_mysql/python_mysql_select_data.htm">https://www.tutorialspoint.com/python_mysql/python_mysql_select_data.htm</a></code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">import mysql.connector</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#establishing the connection</code></p>
|
||
<p><code class="western">conn = mysql.connector.connect(</code></p>
|
||
<p><code class="western"> </code><code class="western">user='</code><code class="western"><font face="Liberation Mono, monospace">admin3</font></code><code class="western">',
|
||
password='</code><code class="western">pi</code><code class="western">',
|
||
host='192.168.178.25', database='</code><code class="western"><font face="Liberation Mono, monospace">test_arduino</font></code><code class="western">'</code></p>
|
||
<p><code class="western">)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Creating a cursor object using the cursor()
|
||
method</code></p>
|
||
<p><code class="western">cursor = conn.cursor()</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Retrieving single row</code></p>
|
||
<p><code class="western"><font face="Liberation Mono, monospace">quer</font></code><code class="western">y</code><code class="western">
|
||
= '''SELECT * from </code><code class="western"><font face="Liberation Mono, monospace">hello_sensor</font></code><code class="western">'''</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Executing the query</code></p>
|
||
<p><code class="western">cursor.execute(</code><code class="western"><font face="Liberation Mono, monospace">quer</font></code><code class="western">y</code><code class="western">)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Fetching 1st row from the table</code></p>
|
||
<p><code class="western">result = cursor.fetchone();</code></p>
|
||
<p><code class="western">print(result)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Fetching </code><code class="western">first
|
||
two</code><code class="western"> row</code><code class="western">s</code><code class="western">
|
||
from the table</code></p>
|
||
<p><code class="western">result = cursor.fetchmany(size=2);</code></p>
|
||
<p><code class="western">print(result)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Fetching </code><code class="western">all</code><code class="western">
|
||
row</code><code class="western">s</code><code class="western"> from
|
||
the table</code></p>
|
||
<p><code class="western">result = cursor.fetchall();</code></p>
|
||
<p><code class="western">print(result)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Closing the connection</code></p>
|
||
<p><code class="western">conn.close()</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">9.3<code class="western">Create table</code></h2>
|
||
<p><code class="western"><a href="https://www.tutorialspoint.com/python_mysql/python_mysql_create_table.htm">https://www.tutorialspoint.com/python_mysql/python_mysql_create_table.htm</a></code></p>
|
||
<p><code class="western">import mysql.connector</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#establishing the connection</code></p>
|
||
<p><code class="western">conn = mysql.connector.connect(</code></p>
|
||
<p><code class="western"> </code><code class="western">user='root',
|
||
password='password', host='127.0.0.1', database='mydb'</code></p>
|
||
<p><code class="western">)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Creating a cursor object using the cursor()
|
||
method</code></p>
|
||
<p><code class="western">cursor = conn.cursor()</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Dropping EMPLOYEE table if already exists.</code></p>
|
||
<p><code class="western">cursor.execute("DROP TABLE IF EXISTS
|
||
EMPLOYEE")</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Creating table as per requirement</code></p>
|
||
<p><code class="western">sql ='''CREATE TABLE EMPLOYEE(</code></p>
|
||
<p><code class="western"> </code><code class="western">FIRST_NAME
|
||
CHAR(20) NOT NULL,</code></p>
|
||
<p><code class="western"> </code><code class="western">LAST_NAME
|
||
CHAR(20),</code></p>
|
||
<p><code class="western"> </code><code class="western">AGE INT,</code></p>
|
||
<p><code class="western"> </code><code class="western">SEX CHAR(1),</code></p>
|
||
<p><code class="western"> </code><code class="western">INCOME FLOAT</code></p>
|
||
<p><code class="western">)'''</code></p>
|
||
<p><code class="western">cursor.execute(sql)</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">#Closing the connection</code></p>
|
||
<p><code class="western">conn.close()</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h2 class="western">9.4<code class="western">Insert data</code></h2>
|
||
<p><code class="western"><a href="https://www.tutorialspoint.com/python_mysql/python_mysql_insert_data.htm">https://www.tutorialspoint.com/python_mysql/python_mysql_insert_data.htm</a></code></p>
|
||
<p><code class="western">import mysql.connector</code></p>
|
||
<p><code class="western">#establishing the connection</code></p>
|
||
<p><code class="western">conn = mysql.connector.connect(</code></p>
|
||
<p><code class="western"> </code><code class="western">user='root',
|
||
password='password', host='127.0.0.1', database='mydb'</code></p>
|
||
<p><code class="western">)</code></p>
|
||
<p><code class="western">#Creating a cursor object using the cursor()
|
||
method</code></p>
|
||
<p><code class="western">cursor = conn.cursor()</code></p>
|
||
<p><code class="western"># Preparing SQL query to INSERT a record
|
||
into the database.</code></p>
|
||
<p><code class="western">insert_stmt = (</code></p>
|
||
<p><code class="western"> </code><code class="western">"INSERT
|
||
INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)"</code></p>
|
||
<p><code class="western"> </code><code class="western">"VALUES
|
||
(%s, %s, %s, %s, %s)"</code></p>
|
||
<p><code class="western">)</code></p>
|
||
<p><code class="western">data = ('Ramya', 'Ramapriya', 25, 'F', 5000)</code></p>
|
||
<p><code class="western">try:</code></p>
|
||
<p><code class="western"> </code><code class="western"># Executing
|
||
the SQL command</code></p>
|
||
<p><code class="western"> </code><code class="western">cursor.execute(insert_stmt,
|
||
data)</code></p>
|
||
<p><code class="western"> </code><code class="western"># Commit
|
||
your changes in the database</code></p>
|
||
<p><code class="western"> </code><code class="western">conn.commit()</code></p>
|
||
<p><code class="western">except:</code></p>
|
||
<p><code class="western"> </code><code class="western"># Rolling
|
||
back in case of error</code></p>
|
||
<p><code class="western"> </code><code class="western">conn.rollback()</code></p>
|
||
<p><code class="western"># Closing the connection</code></p>
|
||
<p><code class="western">conn.close()</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">10<code class="western">Schedule periodic RasPi
|
||
reboot</code></h1>
|
||
<p><code class="western"><a href="https://raspberrypi.stackexchange.com/questions/2150/how-do-i-reboot-at-a-specific-time">https://raspberrypi.stackexchange.com/questions/2150/how-do-i-reboot-at-a-specific-time</a></code></p>
|
||
<p><code class="western"><a href="https://smarthomepursuits.com/how-to-reboot-raspberry-pi-on-a-schedule/">https://smarthomepursuits.com/how-to-reboot-raspberry-pi-on-a-schedule/</a></code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo crontab
|
||
-e</code></p>
|
||
<p><code class="western">>>>>> choose nano editor</code></p>
|
||
<p><code class="western">>>>>> enter following command
|
||
at end of file for </code><code class="western">daily </code><code class="western">reboot
|
||
at 13:03:</code></p>
|
||
<p><code class="western">03 13 * * * /sbin/shutdown -r now</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">Check time in Linux commandline:</code></p>
|
||
<p><code class="western"><a href="https://www.lifewire.com/display-date-time-using-linux-command-line-4032698">https://www.lifewire.com/display-date-time-using-linux-command-line-4032698</a></code></p>
|
||
<p><code class="western">$ date</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">11<code class="western">Install KeePass</code></h1>
|
||
<p><code class="western"><a href="https://keepass.info/download.html">https://keepass.info/download.html</a></code></p>
|
||
<p><code class="western"><a href="https://sourceforge.net/p/keepass/discussion/329220/thread/17d1bd26/">https://sourceforge.net/p/keepass/discussion/329220/thread/17d1bd26/</a></code></p>
|
||
<p><code class="western">sudo apt-add-repository ppa:jtaylor/keepass</code></p>
|
||
<p><code class="western">sudo apt-get update</code></p>
|
||
<p><code class="western">sudo apt-get install keepass2 </code>
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">12<code class="western">Clean</code><code class="western">
|
||
the repository of downloaded packages</code></h1>
|
||
<p><code class="western"><a href="https://askubuntu.com/questions/634820/how-can-i-delete-ubuntu-temp-files-which-are-created-during-software-installatio">https://askubuntu.com/questions/634820/how-can-i-delete-ubuntu-temp-files-which-are-created-during-software-installatio</a></code></p>
|
||
<p><code class="western">sudo </code><code class="western">apt-get
|
||
autoclean</code></p>
|
||
<p><code class="western">sudo </code><code class="western">apt-get
|
||
clean</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">13<code class="western">cleanup a
|
||
/var/log/journal in Linux</code></h1>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">How to tell how much space is being taken?</code></p>
|
||
<p><code class="western">$ </code><code class="western">journalctl
|
||
--disk-usage</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">Fix: Option 3 (RECOMMENDED!):</code></p>
|
||
<p><code class="western">$ journalctl --vacuum-size=500M</code></p>
|
||
<p><code class="western">This will delete old log files until the
|
||
directory reaches the threshold size stipulated, in our case, 500M.</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<h1 class="western">14<code class="western">Change permission of
|
||
mounted drive</code></h1>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><code class="western">$
|
||
</code><code class="western">sudo chmod -R 770 /media/bora/Medien</code></p>
|
||
<p><code class="western">sudo mount -o rw,remount /</code><code class="western">media/bora/Medien</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western"><a href="https://askubuntu.com/questions/948416/changing-ownership-of-read-only-file-system-i-cant-move-delete-rename-any-f">https://askubuntu.com/questions/948416/changing-ownership-of-read-only-file-system-i-cant-move-delete-rename-any-f</a></code></p>
|
||
<p><code class="western">$ </code><code class="western">mount -v |
|
||
grep "^/" | awk '{print "\nPartition identifier: "
|
||
$1 "\n Mountpoint: " $3}'</code></p>
|
||
<p><code class="western">$ </code><code class="western">sudo mount -o
|
||
remount,rw /</code><code class="western">dev/sda5</code><code class="western">
|
||
/</code><code class="western">media/bora/Medien</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><code class="western">“</code><code class="western">If you are
|
||
on a dual boot system and getting the error related to the read-only
|
||
file system. One probable cause could be that your other system is
|
||
not correctly shut down and might be in hibernation or sleep. So
|
||
login to that system and shut it down properly and religion to your
|
||
Linux system. this resolved the issue in my system”</code></p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p><br/>
|
||
<br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
<p style="line-height: 100%; margin-bottom: 0in"><br/>
|
||
|
||
</p>
|
||
</body>
|
||
</html> |