树莓派3B&MySQL环境配置与使用详细教程
安装配置MySQL
1.更新apt-get
sudo apt-get update
(在shell里面输入命令,下同)
2.安装MySQL
sudo apt-get install mysql-server
mysqlmariadbconfd50servercnf_18">3. 打开 /etc/mysql/mariadb.conf.d/50-server.cnf并修改
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
进入一个文档界面,将光标移动至bind-address处,点击i键开始编辑,用#来注释掉bind-address,然后按esc,输入 :wq! 保存退出,可以用命令再次进入文档查看是否修改成功。(如果对操作不熟悉,修改了其他地方又不好改,按esc,再输入 :q! 就可以不保存退出,你需要用sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf重新进文档修改)
设置新用户
进入MySQL先
sudo mysql
添加用户noel,密码123456
CREATE USER 'noel'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'noel'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
退出数据库
exit
修改密码的方法
下面更改之前创建的用户Noel的密码
sudo mysqladmin -u noel -p password
会提示输入旧密码:
新密码:
确认新密码:
(这里输密码的时候是看不见的,只要确保前后输入一致就行,错了也会有提示的)
重启MySQL
重启
sudo service mysql stop
sudo service mysql start
用户登录,并输入密码
sudo mysql -u noel -p
测试数据库
查看当前已经建立的数据库
SHOW DATABASES;
(这里之前已经建立了senserdb和senserdb_lx两个数据库)
创建新的数据库和表单并查看是否创建成功
创建数据库
CREATE DATABASE noeldb;
SHOW databases;
如有需要删除某个数据库,用drop:
drop database xxxxxx;
在noeldb下创建一个表单(table),该表单包含三个域(fields):时间、温度、湿度。
USE noeldb;
create table noeldb_ht(Time datetime,Temperature float(3,1),Humidity float(3,1));
查看表单是否创建成功:
show tables;
创建成功后的可以看到:
查看表单属性:
DESCRIBE noeldb_ht;
手动插入数据,并查看
insert into noeldb_ht values('2020-04-23',22,65);
select *from noeldb_ht;
成功插入数据:
写入温湿度数据进数据库
1、环境配置
获取
git clone https://github.com/PyMySQL/PyMySQL
切换目录
cd PyMySQL
安装
sudo python3 setup.py install
2、温湿度检测以及数据写入
传感器:DHT11
引脚:GPIO4
代码:
python">#! /usr/bin/python
# -*- coding:utf-8 -*-
import RPi.GPIO as GPIO #( 导入模块 )
import sys
import time
import pymysql
pymysql.install_as_MySQLdb()
dht11_rpi_pin=4 #湿度温度连接的引脚号 GPIO4
def GPIO_INIT():
GPIO.setwarnings(False)
#( 引脚编号 )
#初始化引脚
GPIO.setmode(GPIO.BCM)
# 用于获取湿度温度
# dht11_rpi_pin : 湿度温度连接的引脚号
# 返回二元组 [ 湿度 , 温度 ]
def get_dht11(dht11_pin):
buff=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
data = []
j = 0
GPIO.setup(dht11_rpi_pin, GPIO.OUT)
GPIO.output(dht11_pin,0)
time.sleep(0.02) # 拉低20ms
GPIO.output(dht11_pin,1)
time.sleep(0.000025)# 拉高20-40us
GPIO.setup(dht11_pin,GPIO.IN)
while not GPIO.input(dht11_pin): # 检测返回信号 检测到启示信号的高电平结束
continue
while GPIO.input(dht11_pin): # 检测到启示信号的高电平则循环
continue
while j < 40:
k = 0
while GPIO.input(dht11_pin) == GPIO.LOW:
# print ("pinlevel_1")
continue
while GPIO.input(dht11_pin) == GPIO.HIGH:
# print ("pinlevel_2")
k += 1
if k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
print ("sensor is working.")
# print (data)
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
for i in range(8):
humidity += humidity_bit[i] * 2 ** (7-i)
humidity_point += humidity_point_bit[i] * 2 ** (7-i)
temperature += temperature_bit[i] * 2 ** (7-i)
temperature_point += temperature_point_bit[i] * 2 ** (7-i)
check += check_bit[i] * 2 ** (7-i)
tmp = humidity + humidity_point + temperature + temperature_point
if check == tmp:
#print ("temperature : ", temperature, ", humidity : " , humidity)
#这里开始写入数据库了
conn= pymysql.connect(
host='127.0.0.1',
port = 3306,
user='andy',
passwd='123456',
db ='noeldb',
)
cur = conn.cursor()
cur.execute("insert into noeldb_ht(Time,Temperature,Humidity) values(now(),'%d','%d')"%(temperature,humidity))
cur.close()
conn.commit()
conn.close()
return ["当前湿度:",humidity,"温度:",temperature]
else:
print ("wrong")
print ("temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp)
try:
GPIO_INIT()
time.sleep(2)
while True:
print(get_dht11(dht11_rpi_pin))
time.sleep(2)
except KeyboardInterrupt:
GPIO.cleanup()#清除引脚设置恢复默认 程序结束时, 最好清除引脚设置并恢复默认.
停止温湿度采集程序后在shell里面查看自动写入的温湿度
select *from noeldb_ht;
没了!
--------------------------------------------------------------------------------------------诺有缸的高飞鸟202004