第一次嵌入式课程大作业

一年级下的嵌入式期末考试,当时做完忘记录一下了,现在重新上传

课程要求:

(1) 记录24小时内 当前环境的 温、湿度、存入数据库 (每分钟记录1次);
(2) 如有人靠近树莓派1米以内时,记录靠近的时刻、持续时间;
(3) 绘制24小时内,温、湿度的变化曲线,把人的活动标注在曲线上;
(4) 分析当人靠近、停留多长时间会对温、湿度产生影响;

此课程要求需要用到linux,mysql,python相关的知识

记录时间2020-06-10  08:30: 00  开始记录温度和人体红外时间

这里我们根据任务一步一步来完成。
任务要求一:记录24小时内 当前环境的 温、湿度、存入数据库 (每分钟记录1次);
因为我用的传感器是DS18B20,只能测量温度,故这里只记录当前环境的温度并存入数据库。

第一种测温度的方法
第一步:配置文件

打开根目录下的boot目录下的config.txt,在代码的最末行加上这一句,意思是添加device tree设备,管脚为gpiopin4(BCM编码)

第二步:查看模块是否启动

重启树莓派是否设置生效,可运行lsmod命令,查看是否有如下两个模块

如果没有发现,也可运行如下命令加载模块
sudo modprobe w1-gpio
sudo modprobe w1-therm

第三步:读取温度

分别输入以下命令,在28-xxx开头的文件中读取w1-slave文件则会返回当前的温度值,可见此时的温度值为28.312°

-----------------------------------到这里,可以通过以上的步骤读出温度的代码,但也可以通过编写代码来读取温度值

第四步:建立数据库与数据表,以记录数据

建立一个other数据库,other数据库里面有表pi和表pi_hongwai,分别用来存放当前环境温度值和人体靠近的时间和持续时间(表pi_hongwai2是我自己建立的一个测试表)

数据表pi中定义了自动增量id,记录温度的时间time,当前的温度temperature

数据表pi_hongwai 中定义了自动增量id,和人体靠近的时刻closetime,持续的时间duration

表建立好了,现在我们可以开始编写代码上传数据到表中了

第二种测温度的方法
测量温度的python代码如下:
import pymysql
import time
import re#连接数据库
way='/sys/bus/w1/devices/28-01193893fef4/w1_slave'     # 文件路径
print("system start , start connect mysql")
conn = pymysql.connect(host="127.0.0.1",user="root",passwd="123456",db="other") #连接数据库
cursor=conn.cursor()
print("connect mysql succeed")#向pi表中插入数据
def order(values):global cursor,connvalue=str(values)print(value)itime=str(time.strftime('%Y-%m-%d %H:%M:%S'))print(itime)iorder="insert into pi(time,temperature) values('"+itime+"','"+value+"');"cursor.execute(iorder)conn.commit()
try:  #看能不能打开文件file=open(way,'r')
except Exception as result:print("%s" % result)order('-404')     # 如果打开文件失败,则传送-404字符串,意思是当读出的温度值为-404时,代表文件读取失败conn.close()try:file.close()except Exception as result:passexit()try: #将温度值写入表中的temperaturetemperature=file.read()crc=re.compile('crc=.*?(.*?)\n').findall(temperature)[0]t=re.compile('t=(.*?)\n').findall(temperature)[0]t=str(float(t)/1000.0)order(t)
except Exception as result: #不能写入则temperature值为-510print("%s" % result)order('-510')
finally:file.close()conn.close()

到这里一次测量温度的代码就写好了,此时当我们执行一次代码,即读出一次温度值

第六步:每分钟测量一次

根据要求我们需要每一分钟获取一次数据,此时我们用软件crontab,linux crontab是用来定期执行程序的命令,在终端窗口输入命令: crontab -e ,在里面的最末行加上如下红框中的代码,意思是每小时每分钟执行一次后面路径上的文件,DS18B20.py是我们第四步编写的代码

任务要求二: 如有人靠近树莓派1米以内时,记录靠近的时刻、持续时间;
根据要求我们需要用到人体红外传感器,同时我们用led灯来显示是否有人靠近,方便观察

#物理引脚下
#LED vcc=11   GND=9
#人体红外传感器 GPIO_IN=15;  左vcc=2 ;GND=39
import pymysql
pymysql.install_as_MySQLdb()
import RPi.GPIO as GPIO
import sys
import time
import osGPIO_IN = 15  #人体红外传感器输入 GPIO3
*初始化引脚*def init():GPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD)GPIO.setup(GPIO_IN, GPIO.IN)GPIO.setup(11,GPIO.OUT)#连接数据库
print("开始连接数据库")
conn = pymysql.connect(host="127.0.0.1",port=3306,user="root", passwd="123456", db="other")  # 连接数据库
cursor = conn.cursor()
print("数据库连接成功")#向pi_hongwai表中插入数据
def order(values):global cursor, connvalue = str(values)print(value)itime = str(time.strftime('%Y-%m-%d %H:%M:%S'))iorder = "insert into pi_hongwai(closetime,duration) values('" + itime + "','" + value + "');"cursor.execute(iorder)conn.commit()try:          init()while True:if GPIO.input(15) == 1:t1 = time.strftime('%Y%m%d%H%M%S')GPIO.output(11,GPIO.HIGH)   # 有人靠近时,led灯亮起print("someone is closing...")while GPIO.input(15)==GPIO.HIGH:  # 为低电平才通过passt2 = time.strftime('%Y%m%d%H%M%S')print(" now nobody")GPIO.output(11,GPIO.LOW)  # 当人远离时,led灯熄灭if t1[11]!=t2[11]:     # 当时间的分钟不相等时,多减去一个40得出正确的时间,但这里并未对跨越 小时 的时候做出处理,只有在后面人为处理一下数据t=int(t2)-int(t1)-40else:t = int(t2)-int(t1)order(t)time.sleep(0.5)
except Exception as result:print("%s" %result)
finally:GPIO.cleanup()

人体红外的检测代码到这里了,接下来等待24小时的数据上传…
开始记录时间:2020-06-09 08:31: 00
结束记录时间:2020-06-10 08:31: 00

任务要求三:绘制24小时内,温、湿度的变化曲线,把人的活动标注在曲线上;
经过一天的数据读取和上传,数据库中已经存放了很多数据,下面的第一张图是每隔一分钟的温度测量,第二张图是人靠近的时间以及持续的时间

将测得的所有温度值的数据汇成曲线(横坐标时间,纵坐标温度/°)

将人体红外传感器测得的人体靠近时间和持续时间绘制成曲线(横坐标时间,纵坐标持续时间/s)

任务要求四:分析当人靠近、停留多长时间会对温、湿度产生影响;
由于我采用的传感器精度不是很高,很多时间在无人的时候因为受到热源的影响也会做出反应,而且由于室内空调的影响,人对传感器的影响可以忽略不计,故这次实验我认为,人靠近和停留多久都不会对温度产生影响。

总结:经过此次课程实验,这次任务完美结合了三者的使用,使我对linux操作系统,python语言,以及数据库mysql有了深入的了解,从小白成长为入门,这只是嵌入式的第一步,继续加油!

【嵌入式】第一次大作业_记录环境温度并存入数据库相关推荐

  1. 嵌入式期末大作业——家用智能晾衣杆

    嵌入式期末大作业--家用智能晾衣杆 目录 嵌入式期末大作业--家用智能晾衣杆 前言 一.项目介绍 1.项目背景 2.项目构思 二.系统设计 1.系统概述 2.设计思路 3.设计草图 三.硬件设计 1. ...

  2. 第一次大作业总结——四则运算程序

    经过两周的时间,总算完成了第一次大作业.需求非常简单,编写一个四则运算程序,要求可以从记事本读取算式,并算出结果.支持与用户交互,对用户输入的答案的对错进行判断,并统计回答结果.附加要求是程序自己随机 ...

  3. 移动开发技术第一次大作业

    移动开发技术第一次大作业 ​ --门户界面设计 开发关键步骤: ①页面设计: 主界面设计(由上中下三层界面组成) 顶部界面设计: 底部界面设计: 中层界面使用framelayout用于容纳四个frag ...

  4. 嵌入式系统大作业——基于QT的3D模型展示

    嵌入式系统大作业--基于QT的3D模型展示 写在前面 实验设备 实现内容 实现过程 在win10上利用SolidWorks软件对模型进行预处理: 编写代码实现功能: 效果演示 参考资料 写在前面 该大 ...

  5. HTML5期末大作业:三亚旅游网站设计——三亚旅游网页设计(6页) html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:三亚旅游网站设计--三亚旅游网页设计(6页) html网页设计期末大作业_网页设计平时作业 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  6. HTML+CSS+JS`管理系统网站设计——学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:管理系统网站设计--学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业 常见网页设计作业题材有 个人. 美食. ...

  7. HTML5期末大作业:管理系统网站设计——学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:管理系统网站设计--学生信息管理系统模板 (13页) HTML+CSS+JavaScript html网页设计期末大作业_网页设计平时作业 常见网页设计作业题材有 个人. 美食. ...

  8. HTML5期末大作业:动漫网站设计——动漫电影《你的名字》(7页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页设计期末大作业_网页设计平时作业

    HTML5期末大作业:动漫网站设计--动漫电影<你的名字>(7页) HTML+CSS+JavaScript 学生DW网页设计作业成品 html网页设计期末大作业_网页设计平时作业 常见网页 ...

  9. php开发与应用,PHP开发与应用_大作业_模板

    PHP开发与应用_大作业_模板 本 科 课 程 论 文题目_____________________________________学生姓名 学 号 指导教师 学 院 专 业 交稿日期 信息技术学院网 ...

最新文章

  1. 阿里云短信isp.RAM_PERMISSION_DENY没有访问权限解决办法
  2. c语言中词法分析怎么识别注释,C语言中的词法分析-如何在检测多行注释时使星号被读取并输出?...
  3. 爬虫-post请求练习-百度翻译爬虫-智能的关联搜索不完整词的猜词搜索
  4. Struts2之初识篇(一)——与struts的区别和基本配置
  5. Java关键字:synchronized
  6. 03-01 appium架构介绍与环境安装
  7. python 简介+安装(搬运廖雪峰网站)
  8. 航天电子业绩下降近两成
  9. FPGA学习——Vivado2017.4安装教程
  10. 使用css美化checkbox
  11. ppt模板怎样用到html中,ppt怎样使用在线模板
  12. 美国大厂码农薪资曝光:年薪18万美元,够养家,不够买海景房
  13. 针对支付宝-当面付实现的个人支付
  14. 统计打印字符串arg中每个字符出现的次数
  15. ArcGIS栅格按照象元大小生成矢量的方法
  16. 同桌的你1080pHD国语中字_马立杰_新浪博客
  17. JavaScript小记(持续更新)
  18. 神经网络前向传播和反向传播公式推导(公式+图解)
  19. cocos2dx项目接入爱贝第三方支付sdk遇到的问题及解决方案
  20. MRI血管造影技术之最大密度投影法(maximum intensity projection)重建

热门文章

  1. TurboMail助某水利委员会邮件通讯更新换血
  2. 打造集成SATA驱动程序的XP系统盘
  3. Python实现对nginx日志access.log统计
  4. 大数据平台系统设计包括哪些
  5. BI的价值体现在哪里
  6. 大数据如何应用在生活中
  7. wpf中内容包含在border中_Excel中创建包含注释的数学公式
  8. 《Python自动化》学习笔记:百度云智能进行文字识别(代码干货)
  9. python求高阶导数_python – TensorFlow:计算Hessian矩阵(和更高阶导数)
  10. php开启filtervar_PHP如何使用filter_var()函数?(代码示例)