diff --git a/test_transfer_odt_5.html b/test_transfer_odt_5.html new file mode 100644 index 0000000..197ab26 --- /dev/null +++ b/test_transfer_odt_5.html @@ -0,0 +1,1808 @@ + + + + +
+ +
+
+
+
+
+
+
+
+
+
enabling
+SSH
https://randomnerdtutorials.com/installing-raspbian-lite-enabling-and-connecting-with-ssh/
add
+ file “ssh” into boot folder
+
+
Establishing
+an SSH Communication
$
+sudo ssh pi@192.168.178.25
user:
+pi, pass: pi
+
+
Shutting
+Down
$
+sudo poweroff
+
+
+
+
+
+
+
+
https://randomnerdtutorials.com/raspberry-pi-apache-mysql-php-lamp-server/
https://www.instructables.com/Installing-LAMP-Linux-Apache-MySQL-PHP-on-a-Raspbe/
+
+
+
+
Updating
+and Upgrading
$
+sudo apt update && sudo apt upgrade -y
+
+
+
+
+
+
+
+
Install
+Apache2
$
+sudo apt install apache2 -y
+
+
Testing
+Apache installation
$
+cd /var/www/html
$
+ls -al
This
+should show “index.html”
+
+
get
+RasPi IP address
$
+hostname -I
+
+
enter
+IP address into Browser → the Apache Debian page should appear
+
+
+
+
+
+
+
+
Install
+PHP
$
+cd /var/www/html
$
+sudo apt install php -y
$
+sudo rm index.html
+
+
$
+sudo nano index.php
Add
+following script into the php file:
<?php
+echo "hello world"; ?>
Save
+with Ctrl+X >> y >> Enter, or
+Ctrl+O >> Enter >> Ctrl+X
OR
<?php
+phpinfo(); ?>
OR
$
+echo "<?php phpinfo ();?>" >
+/var/www/html/index.php
+
+
Restart
+Apache
$
+sudo service apache2 restart
+
+
test
+if Apache2 is serving .php files by opening RasPi IP address in
+browser
+
+
+
if
+all is fine, index.php can be removed
$
+sudo rm index.php
+
+
+
+
+
+
Install
+MySQL (MariaDB Server)
$
+sudo apt install mariadb-server php-mysql -y
$
+sudo service apache2 restart
$
+sudo mysql_secure_installation
In
+all cases, answer with y
+
+
create
+new user “admin” with password
+“your_password”
$
+sudo mysql --user=root --password
>
+create user admin@localhost identified by 'your_password';
>
+grant all privileges on *.* to admin@localhost;
>
+FLUSH PRIVILEGES;
>
+exit;
+
+
Important
+to generate user that is not limited to a certain domain!!
>
+grant all privileges on *.* to
+'admin3'@'%';
+
+
+
+
+
+
+
+
Install
+phpMyAdmin
$
+cd /var/www/html
$
+sudo apt install phpmyadmin -y
+
+
Options:
dbconfig-common
Apache2
Configuring
+ phpmyadmin? OK
Configure
+ database for phpmyadmin with dbconfig-common? Yes
Password:
+ pi
+
+
$
+sudo phpenmod mysqli
$
+sudo service apache2 restart
+
+
open
+following address
+http://192.168.178.25/phpmyadmin
+
+
if
+“Not Found”
$
+cd /var/www/html
$
+sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
$
+ls
>>
+phpmyadmin
+
+
again,
+open following address
http://192.168.178.25/phpmyadmin
+
+
login
+with username=root, password=pi
+
+
+
+
+
+
+
+
change
+the permissions for your /var/www/html/ folder.
$
+cd ~
$
+ls -lh /var/www/
$
+sudo chown -R pi:www-data /var/www/html/
$
+sudo chmod -R 770 /var/www/html/
$
+ls -lh /var/www/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
https://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/
+
+
+
+
Create
+database:
esp_data
utf8mb4_general_ci
+
+
+
+
Create
+table by calling SQL query:
CREATE
+TABLE SensorData (
+ id INT(6) UNSIGNED AUTO_INCREMENT
+PRIMARY KEY,
+ sensor VARCHAR(30) NOT NULL,
+ location VARCHAR(30) NOT NULL,
+ value1 VARCHAR(10),
+ value2 VARCHAR(10),
+ value3 VARCHAR(10),
+ reading_time TIMESTAMP DEFAULT
+CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
+
+
+
+
PHP
+script that is responsible for receiving incoming requests from the
+ESP32 or ESP8266 and inserting the data into a MySQL database.
$
+cd ~
$
+nano /var/www/html/post-esp-data.php
+
+
+
+
+
+
+
+
+
+
+
+
+
+
https://github.com/ChuckBell/MySQL_Connector_Arduino/wiki/Troubleshooting
tr
+to connect to msql from another computer:
$
+mysql -uadmin
+-ppi
+–h192.168.178.25 –port=3306
$
+mysql --user=admin
+--password=pi
+--host=192.168.178.25
+--port=3306
$
+mysql --user=admin
+--password=pi
+--host= 127.0.0.1
+--port=3306
+
+
$
+mysql -u admin
+-p pi
+-h 127.0.0.1 test_arduino
+
+
+
+
+
+
Important
+in case of “ERROR 2003 (HY000): Can't connect to local MySQL server
+through socket”
$
+sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
+
Here,
+the binding address = 127.0.0.1 must be commented out!!!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Configuring WiFi in
+headless modehttps://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
https://www.seeedstudio.com/blog/2021/01/25/three-methods-to-configure-raspberry-pi-wifi/
+
+
+
sshTo 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.
+
+
+
wpa_supplicant.conf
+$ sudo nano
+/etc/wpa_supplicant/wpa_supplicant.conf
+
+
+
ctrl_interface=DIR=/var/run/wpa_supplicant
+GROUP=netdev
update_config=1
country=<Country
+Code>
network={
ssid="<SSID>"
psk="<PASSWORD>"
scan_ssid=1
}
+
+
+
Arduino script for writing
+to MariaDB/MySQL databaseCheck sketch “Complex_Insert_WiFi_BE”
+
+
+
+
+
+
+
+
+
Showing DB content as html
+pagehttps://randomnerdtutorials.com/esp32-esp8266-raspberry-pi-lamp-server/
+
+
+
$ nano /var/www/html/esp-data.php
+
+
+
open page http://192.168.178.25/esp-data.php
+
+
+
esp-data.php<!DOCTYPE html>
<html><body>
<?php
/*
Rui Santos
Complete
+project details at
+https://RandomNerdTutorials.com/esp32-esp8266-mysql-database-php/
+
Permission is
+hereby granted, free of charge, to any person obtaining a copy
of this
+software and associated documentation files.
+
The above
+copyright notice and this permission notice shall be included in all
copies or
+substantial portions of the Software.
*/
+
+
+
$servername = "192.168.178.25";
+
+
+
// REPLACE with your Database name
$dbname = "test_arduino";
// REPLACE with Database user
$username
+= "admin3";
//
+REPLACE with Database user password
$password
+= "pi";
+
+
+
// Create connection
$conn = new mysqli($servername, $username,
+$password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection
+failed: " . $conn->connect_error);
}
+
+
+
+
$sql = "SELECT num,
+message,
+sensor_num,
+value,
+recorded
+FROM hello_sensor
+ORDER BY num
+DESC";
+
+
+
echo '<table cellspacing="5"
+cellpadding="5">
<tr>
+
+
<td>num</td>
+
+
<td>message</td>
+
+
<td>sensor_num</td>
+
+
<td>value</td>
+
+
<td>recorded</td>
+
+
</tr>';
+
if ($result = $conn->query($sql)) {
while ($row
+= $result->fetch_assoc()) {
$row_num
+= $row["num"];
$row_message
+= $row["message"];
$row_sensor_num
+= $row["sensor_num"];
$row_value
+= $row["value"];
$row_recorded
+= $row["recorded"];
//
+Uncomment to set timezone to - 1 hour (you can change 1 to any
+number)
//$row_reading_time
+= date("Y-m-d H:i:s", strtotime("$row_reading_time - 1
+hours"));
+
//
+Uncomment to set timezone to + 4 hours (you can change 4 to any
+number)
//$row_reading_time
+= date("Y-m-d H:i:s", strtotime("$row_reading_time + 4
+hours"));
+
echo
+'<tr>
+
<td>'
+. $row_num
+. '</td>
+
<td>'
+. $row_message
+. '</td>
+
<td>'
+. $row_sensor_num
+. '</td>
+
<td>'
+. $row_value
+. '</td>
+
<td>'
+. $row_recorded
+. '</td>
+
</tr>';
}
$result->free();
}
+
+
+
$conn->close();
?>
+
</table>
</body>
</html>
+
+
+
+
+
+
+
+
+
Plotting of data from
+MariaDB/MySQL databasehttps://randomnerdtutorials.com/visualize-esp32-esp8266-sensor-readings-from-anywhere/
+
+
+
$ sudo nano
+/var/www/html/esp-chart.php
esp-chart.php
+
+
+
<!--
Rui Santos
Complete
+project details at https://RandomNerdTutorials.com
+
Permission is
+hereby granted, free of charge, to any person obtaining a copy
of this
+software and associated documentation files.
+
The above
+copyright notice and this permission notice shall be included in all
copies or
+substantial portions of the Software.
+
+
+
-->
<?php
+
+
+
$servername = "192.168.178.25";
+
+
+
// REPLACE with your Database name
$dbname = "test_arduino";
// REPLACE with Database user
$username
+= "admin3";
//
+REPLACE with Database user password
$password
+= "pi";
+
+
+
// Create connection
$conn = new mysqli($servername, $username,
+$password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection
+failed: " . $conn->connect_error);
}
+
+
+
+
$sql = "SELECT num,
+message,
+sensor_num,
+value,
+value_h,
+recorded
+FROM hello_sensor
+WHERE
+sensor_num = 0 ORDER BY num
+DESC limit 40";
+
+
+
$result = $conn->query($sql);
+
+
+
while ($data = $result->fetch_assoc()){
$sensor_data[]
+= $data;
}
+
+
+
$recorded
+= array_column($sensor_data, 'recorded');
+
+
+
// ******* Uncomment to convert readings
+time array to your timezone ********
/*$i = 0;
foreach ($readings_time as $reading){
//
+Uncomment to set timezone to - 1 hour (you can change 1 to any
+number)
$readings_time[$i]
+= date("Y-m-d H:i:s", strtotime("$reading - 1
+hours"));
//
+Uncomment to set timezone to + 4 hours (you can change 4 to any
+number)
//$readings_time[$i]
+= date("Y-m-d H:i:s", strtotime("$reading + 4
+hours"));
$i += 1;
}*/
+
+
+
$value
+= json_encode(array_reverse(array_column($sensor_data, 'value')),
+JSON_NUMERIC_CHECK);
$value_h
+= json_encode(array_reverse(array_column($sensor_data, 'value_h')),
+JSON_NUMERIC_CHECK);
$recorded
+= json_encode(array_reverse($recorded),
+JSON_NUMERIC_CHECK);
+
+
+
/*echo $value1;
echo $value2;
echo $value3;
echo $reading_time;*/
+
+
+
$result->free();
$conn->close();
?>
+
+
+
<!DOCTYPE html>
<html>
<meta name="viewport"
+content="width=device-width, initial-scale=1">
<script
+src="https://code.highcharts.com/highcharts.js"></script>
<style>
body {
min-width:
+310px;
max-width:
+1280px;
height:
+500px;
margin: 0
+auto;
}
h2 {
font-family:
+Arial;
font-size:
+2.5rem;
text-align:
+center;
}
</style>
<body>
<h2>ESP
+Weather Station</h2>
<div
+id="chart-temperature" class="container"></div>
<div
+id="chart-humidity" class="container"></div>
<script>
+
+
+
var value
+= <?php echo $value;
+?>;
var value_h
+= <?php echo $value_h;
+?>;
var recorded
+= <?php echo $recorded;
+?>;
+
+
+
var chartT = new Highcharts.Chart({
chart:{
+renderTo : 'chart-temperature' },
title: {
+text: 'BME280 Temperature' },
series: [{
showInLegend:
+false,
data: value
}],
plotOptions:
+{
line: {
+animation: false,
dataLabels:
+{ enabled: true }
},
series: {
+color: '#059e8a' }
},
xAxis: {
+
type:
+'datetime',
categories:
+recorded
},
yAxis: {
title: {
+text: 'Temperature (Celsius)' }
//title: {
+text: 'Temperature (Fahrenheit)' }
},
credits: {
+enabled: false }
});
+
+
+
+
+
+
+
+
+
var chartH = new Highcharts.Chart({
chart:{
+renderTo:'chart-humidity' },
title: {
+text: 'BME280 Humidity' },
series: [{
showInLegend:
+false,
data:
+value_h
}],
plotOptions:
+{
line: {
+animation: false,
dataLabels:
+{ enabled: true }
}
},
xAxis: {
type:
+'datetime',
//dateTimeLabelFormats:
+{ second: '%H:%M:%S' },
categories:
+recorded
},
yAxis: {
title: {
+text: 'Humidity (%)' }
},
credits: {
+enabled: false }
});
+
+
+
</script>
</body>
</html>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Using canvas.jshttps://canvasjs.com/php-charts/multiseries-chart/
+
+
+
+
+
+
+
+
+
External access to LAMP
+serverport 22 (ssh), port 80 (http)
+
+
+
+
+
+
https://howtoraspberrypi.com/enable-mysql-remote-connection-raspberry-pi/
Configure MySQL to accept external
+connections to Raspberry Pi
$ sudo nano /etc/mysql/my.cnf
#bind-address = 127.0.0.1 <<<<<
+comment the line bind-address
optionally
+modify
+the MySQL port to reduce risk of
+attacks, e.g.
port = 8457
+
+
+
$ /etc/init.d/mysql
+restart
+
+
+
+
+
+
RasPi as Samba serverSMB is the best protocol for use on multiple
+platforms due to superior interoperability
+
+
+
in case of issue “chown: changing
+ownership of '...': Operation not permitted”:
https://stackoverflow.com/questions/25559700/chown-command-returning-operation-not-permitted
get uid:
$ cat /etc/passwd |grep pi
get gid:
$ cat
+/etc/group |grep pi
Give pi:pi access to the entire /mnt/usb
+mount:
$ sudo mount -o remount,gid=<pi's
+gid>,uid=<pi's
+uid> /mnt/usb
+
+
+
Attention: FAT
+file system doesn't support such permissions, so they can't be
+applied after the drive is mounted
Instead, drive should be formatted with pi
+user and/or ntfs file sstem?
+
+
+
+
+
+
Mounting USB drive that
+is NTFS???-formatted
+under specific name:
$ sudo
+fdisk -l
$ sudo umount /dev/sda1
$ sudo mkdir /mnt/usb
$ sudo chown -R pi:pi /mnt/usb
seems like this command has to be used each
+time the usb drive is connected: $ sudo
+mount /dev/sda1 /mnt/usb -o uid=pi,gid=pi
+
+
+
append following text to this file for
+automatic mounting under the specified path:
$ sudo nano /etc/fstab
/dev/sda1 /mnt/usb auto defaults,user 0 1
OR:
/dev/sda1 /mnt/usb ntfs-3g
+defaults,user,uid=1000,gid=1000,noatime 0 0
+
+
+
+
+
+
+
+
+
+
+
+
Make the drive accessible from the network
+by adding following text:
$ sudo apt-get install samba
+samba-common-bin
$ sudo nano /etc/samba/smb.conf
[share]
Comment
+= Shared Folder
Path =
+/mnt/usb
Browseable = yes
Writeable = Yes
only guest = no
create mask = 0777
directory mask = 0777
Public = yes
Guest ok = yes
+
+
+
$ chmod 1777 /mnt/usb
+<<<<
+the uSB should be mounted under this name
$ sudo /etc/init.d/samba restart
+
+
+
+
+
+
sudo service smbd restart
sudo service smbd status
+
+
+
+
+
+
https://www.raspberrypi.org/forums/viewtopic.php?t=56149
$ sudo df
$ cd /media
$ sudo mkdir
+HDD
$ sudo nano
+/etc/fstab
/dev/sda1 /media/HDD ntfs-3g
+ defaults,noatime 0 0
$ cp /etc/samba/smb.conf
+/etc/samba/smb.conf.bak //Make a backup of the config file
$ nano
+/etc/samba/smb.conf
[media]
+
comment = Media share
path = /media/HDD
valid users = @users
force group = users
create mask = 0660
directory mask = 0771
read only = no
+
+
+
+
+
+
sudo service samba restart
sudo useradd ChooseUsernameHere -m -G users
sudo passwd TheChosenUsername //after this
+choose a password for the new user
sudo smbpasswd -a TheChosenUsername //after
+this enter passwd again
>>>>>>>>>>>
+userA pi
+
+
+
+
+
+
+
+
+
mount in Win10/Linux/etc. as
+smb://192.168.178.25/
+
+
+
+
+
+
+
+
+
https://raspberrytips.com/format-mount-usb-drive/
Formatting USB stick with RasPi:
$ sudo fdisk -l
$ sudo fdisk
+/dev/sda1
Create a
+new partition table : g (for GPT, use help for other format)
Create a
+new partition : n
You can
+keep the default values for a single partition
Confirm
+with Y to remove the signature
And finally
+write and exit fdisk: w
$ sudo
+mkfs.ext4 /dev/sda1
+OR: $ sudo
+mkfs.vfat /dev/sda1
+OR: $ sudo
+mkfs.ntfs /dev/sda1
+
+
+
+
+
+
$
+sudo
+mkfs -t vfat -I /dev/sda1
$
+sudo
+mount /dev/sda1
+/mnt/usb
+-o umask=000
$
+sudo umount /mnt/usb
+
+
+
+
+
+
+
+
+
Filtering rows with SQLhttps://chartio.com/blog/simple-sql-filtering-rows/
SELECT column_name1, column_name2
FROM table_name
WHERE column_name1 operator value;
+
+
+
SELECT *
FROM
+hello_sensor
WHERE
+sensor_num = 0
+
ORDER BY
+`hello_sensor`.`recorded` DESC
+
+
+
+
+
+
Python
+MySQLPython MySQL Querying
+Datahttps://stackoverflow.com/questions/44634810/fastest-way-to-fetch-table-from-mysql-into-pandas
MyEngine=create_engine('[YourDatabase]://[User]:[Pass]@[Host]/[DatabaseName]',
+echo = True)
Downloading:
df = pd.read_sql_query('select * from
+[TableName]', con= MyEngine)
Uploading:
df.to_sql([TableName], MyEngine, if_exists =
+'append', index=False)
+
+
+
+
+
+
Using mysql
+modulehttps://www.mysqltutorial.org/python-mysql-query/
https://www.codespeedy.com/fetch-data-from-mysql-table-in-python-program/
https://www.krazyprogrammer.com/2020/11/fetch-and-display-data-from-mysql-using.html
pip install mysql-connector
+
+
+
https://www.tutorialspoint.com/python_mysql/python_mysql_select_data.htm
+
+
+
import mysql.connector
+
+
+
#establishing the connection
conn = mysql.connector.connect(
user='admin3',
+password='pi',
+host='192.168.178.25', database='test_arduino'
)
+
+
+
#Creating a cursor object using the cursor()
+method
cursor = conn.cursor()
+
+
+
#Retrieving single row
query
+= '''SELECT * from hello_sensor'''
+
+
+
#Executing the query
cursor.execute(query)
+
+
+
#Fetching 1st row from the table
result = cursor.fetchone();
print(result)
+
+
+
#Fetching first
+two rows
+from the table
result = cursor.fetchmany(size=2);
print(result)
+
+
+
#Fetching all
+rows from
+the table
result = cursor.fetchall();
print(result)
+
+
+
#Closing the connection
conn.close()
+
+
+
+
+
+
Create tablehttps://www.tutorialspoint.com/python_mysql/python_mysql_create_table.htm
import mysql.connector
+
+
+
#establishing the connection
conn = mysql.connector.connect(
user='root',
+password='password', host='127.0.0.1', database='mydb'
)
+
+
+
#Creating a cursor object using the cursor()
+method
cursor = conn.cursor()
+
+
+
#Dropping EMPLOYEE table if already exists.
cursor.execute("DROP TABLE IF EXISTS
+EMPLOYEE")
+
+
+
#Creating table as per requirement
sql ='''CREATE TABLE EMPLOYEE(
FIRST_NAME
+CHAR(20) NOT NULL,
LAST_NAME
+CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
)'''
cursor.execute(sql)
+
+
+
#Closing the connection
conn.close()
+
+
+
Insert datahttps://www.tutorialspoint.com/python_mysql/python_mysql_insert_data.htm
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root',
+password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor()
+method
cursor = conn.cursor()
# Preparing SQL query to INSERT a record
+into the database.
insert_stmt = (
"INSERT
+INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)"
"VALUES
+(%s, %s, %s, %s, %s)"
)
data = ('Ramya', 'Ramapriya', 25, 'F', 5000)
try:
# Executing
+the SQL command
cursor.execute(insert_stmt,
+data)
# Commit
+your changes in the database
conn.commit()
except:
# Rolling
+back in case of error
conn.rollback()
# Closing the connection
conn.close()
+
+
+
+
+
+
+
+
+
Schedule periodic RasPi
+reboothttps://raspberrypi.stackexchange.com/questions/2150/how-do-i-reboot-at-a-specific-time
https://smarthomepursuits.com/how-to-reboot-raspberry-pi-on-a-schedule/
$ sudo crontab
+-e
>>>>> choose nano editor
>>>>> enter following command
+at end of file for daily reboot
+at 13:03:
03 13 * * * /sbin/shutdown -r now
+
+
+
Check time in Linux commandline:
https://www.lifewire.com/display-date-time-using-linux-command-line-4032698
$ date
+
+
+
+
+
+
+
+
+
Install KeePasshttps://keepass.info/download.html
https://sourceforge.net/p/keepass/discussion/329220/thread/17d1bd26/
sudo apt-add-repository ppa:jtaylor/keepass
sudo apt-get update
sudo apt-get install keepass2
+
+
+
+
+
+
+
+
+
+
Clean
+the repository of downloaded packagessudo apt-get
+autoclean
sudo apt-get
+clean
+
+
+
+
+
+
+
+
+
cleanup a
+/var/log/journal in Linux
+
+
+
How to tell how much space is being taken?
$ journalctl
+--disk-usage
+
+
+
Fix: Option 3 (RECOMMENDED!):
$ journalctl --vacuum-size=500M
This will delete old log files until the
+directory reaches the threshold size stipulated, in our case, 500M.
+
+
+
+
+
+
+
+
+
Change permission of
+mounted drive$
+sudo chmod -R 770 /media/bora/Medien
sudo mount -o rw,remount /media/bora/Medien
+
+
+
$ mount -v |
+grep "^/" | awk '{print "\nPartition identifier: "
+$1 "\n Mountpoint: " $3}'
$ sudo mount -o
+remount,rw /dev/sda5
+/media/bora/Medien
+
+
+
+
+
+
“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”
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+