一、引言
在物联网时代,数据成为了我们获取信息和洞察世界的关键。而其中,数据库是数据存储最常用的工具之一。Microsoft SQL Server(简称MSSQL)是很多企业使用的关系型数据库,它具有可靠性高、数据安全性强等优点。而树莓派,则是在千千万万IoT项目中,最为常用的硬件平台之一。本文就将为你详细介绍如何在树莓派上玩转MSSQL,让你唾手可得地开展智慧硬件项目。
二、MSSQL简介
1. MSSQL概述
Microsoft SQL Server是由微软公司开发的一系列关系型数据库系统。它不仅支持SQL数据库工作,还可以聊天,处理XML文件,使其非常适合从客户端到数据服务器的任何环境,也支持数据仓库和大数据分析。其中SQL Server 2019最受欢迎,因为它支持离线分析,具有其自己的内存机制,并可以快速执行查询任务。
2. MSSQL的优点
MSSQL具有以下几个优点:
具有良好的数据可靠性和安全性。
支持大量数据的存储和处理。
极大地提高了数据库的完整性。
具有较高的并发性和事务处理能力,能够保证对数据的同时访问是正确的。
易于使用,因为大多数用户都熟悉SQL。
三、树莓派的安装与配置
在树莓派上安装MSSQL,需要我们先进行几步配置。这里我们假设读者已经拥有树莓派硬件、系统版本为Raspbian。
1. 安装mssql-tools及依赖项
MSSQL在Linux平台下,需要安装mssql-tools。我们可以使用如下命令进行安装:
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install msodbcsql17
ACCEPT_EULA=Y apt-get install mssql-tools
exit
在安装mssql-tools时,会自动安装libssl1.0.0和libgssapi-krb5-2这两个依赖项,如果你的树莓派已经安装了它们,则可以不用再安装。
2. 连接MSSQL Server
在树莓派上,连接MSSQL Server需要先打开终端,输入如下命令:
sqlcmd -S servername -U username -P password
其中,servername是你的MSSQL服务器地址,username是你的登录名,password是你的密码。
四、树莓派与MSSQL结合案例
1. MSSQL数据库的创建
首先,我们需要在MSSQL Server上创建一个数据库。在这里,我们以“testdb”为例。
CREATE DATABASE testdb;
然后,我们需要在该数据库中创建一张表格作为实例。在这里我们假设这张表格记录了我们树莓派所监控的某个景区的人流量数据(表格列为:日期、时间、景点名称、人流量、是否周末)。
USE testdb;
CREATE TABLE touristflow (
date varchar(20),
time varchar(20),
scenic_spot varchar(20),
flow int,
is_weekend varchar(20));
创建成功后的表格如下图所示:
2. 在树莓派上获取数据
我们可以在树莓派上连接传感器,获取数据。在这里我们以模拟传感器数据作为例子。在Raspberry Pi GPIO 4口连接一个4位数码管,将GPIO 26、19、13、6分别连接到a、b、c、d这四个数码管段的阳极上,GPIO 27~31号口连接到数码管的阴极上。代码如下:
import RPi.GPIO as GPIO
import sys, time
# 定义GPIO编号方式,这样可以使用BCM编码方式
GPIO.setmode(GPIO.BCM)
# 定义管脚位
GPIO_SEGMENTS_A = 26
GPIO_SEGMENTS_B = 19
GPIO_SEGMENTS_C = 13
GPIO_SEGMENTS_D = 6
GPIO_SEGMENTS = [
GPIO_SEGMENTS_A,
GPIO_SEGMENTS_B,
GPIO_SEGMENTS_C,
GPIO_SEGMENTS_D
]
GPIO_DIGITS = [27, 28, 29, 30, 31]
# 设置GPIO管脚为输出
for pin in GPIO_SEGMENTS:
GPIO.setup(pin, GPIO.OUT)
for pin in GPIO_DIGITS:
GPIO.setup(pin, GPIO.OUT)
GPIO.output(GPIO_SEGMENTS, GPIO.LOW)
GPIO.output(GPIO_DIGITS, GPIO.HIGH)
digits = [
0b0111111, # 0
0b0000110, # 1
0b1011011, # 2
0b1001111, # 3
0b1100110, # 4
0b1101101, # 5
0b1111101, # 6
0b0000111, # 7
0b1111111, # 8
0b1101111 # 9
]
def set_digit(digit, number):
"""在数码管上显示数字"""
GPIO.output(GPIO_SEGMENTS, GPIO.LOW)
GPIO.output(GPIO_DIGITS[digit], GPIO.LOW)
for pin in [GPIO_SEGMENTS_A, GPIO_SEGMENTS_B, GPIO_SEGMENTS_C, GPIO_SEGMENTS_D]:
GPIO.output(pin, (number & 1))
number >>= 1
time.sleep(0.0005)
GPIO.output(GPIO_SEGMENTS, GPIO.LOW)
GPIO.output(GPIO_DIGITS[digit], GPIO.HIGH)
def set_number(number):
"""在数码管上显示整数"""
for i in range(len(GPIO_DIGITS)):
set_digit(i, number % 10)
number //= 10
i = 0
while i < 1000:
set_number(i)
i += 1
time.sleep(1)
GPIO.cleanup()
运行上述代码后,可以在数码管上看到数字在1~999之间的每一个数字,每秒钟变化一次。
3. 在树莓派上将获取的数据存储到MSSQL数据库中
我们可以通过Python编程,将我们获取的数据存储到MSSQL数据库的表格中。在这里我们以Python 2.7编写程序。程序首先连接MSSQL数据库,在每次GPIO口取到数码管上的数值后,保存到数据库中,并在终端打印数据的存储结果。代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 引入必要的模块
import sys
import time
import os
import pymssql
# MS SQL Server数据库连接属性
server = "your sql server name or ip address"
user = "your sql server user name"
password = "your sql server password"
database = "your database name"
# 获取当前时间
def now():
return time.strftime('%Y-%m-%d %H:%M:%S')
# 保存数据到 MS SQL Server数据库中
def save(scenic_spot, flow, is_weekend):
# 构造SQL语句
sql = """INSERT INTO touristflow (date, time, scenic_spot, flow, is_weekend)
VALUES (%s, %s, %s, %d, %s)"""
# 数据存储到对应的数据库表格中
with pymssql.connect(server, user, password, database) as conn:
with conn.cursor() as cursor:
date = time.strftime('%Y-%m-%d')
cursor.execute(sql, (date, now(), scenic_spot, flow, is_weekend))
conn.commit()
print('保存景区[%s]的实时人流量数据成功, 当前时间:[%s]' % (scenic_spot, now()))
# GPIO口获取数据
def getGPIO():
# 获取数码管上显示的数字
num = i
scenic_spot = '北京植物园'
if num > 100:
is_weekend = '是'
else:
is_weekend = '否'
# 调用函数,将数据存储到 MS SQL Server数据库中
save(scenic_spot, num, is_weekend)
while(True):
try:
getGPIO()
time.sleep(600)
except KeyboardInterrupt:
print("程序已停止")
sys.exit(0)
运行上述代码后,我们就可以看到在MSSQL数据库的实时态中,添加了一条新的数据记录:
五、总结
本文详细介绍了如何在树莓派上玩转MSSQL,为想要进行智慧硬件开发的工程师们提供了一个简单易学、直接可行的平台。通过本文的介绍,你可以清晰明了地初步认识MSSQL数据库,并掌握了在树莓派上应用MSSQL数据库的相关技术。接下来,就让我们踏上新的智能旅程吧!