树莓派3B&MySQL-学习使用笔记202004(5)

树莓派3B&MySQL环境配置与使用详细教程

安装配置MySQL

1.更新apt-get

sudo apt-get update

(在shell里面输入命令,下同)
在这里插入图片描述

2.安装MySQL

sudo apt-get install mysql-server

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
在这里插入图片描述
代码:

#! /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


版权声明:本文为qq_41102371原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。