网络温湿度监控 一

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/BluseLIBB/article/details/88165639

首先思路很简单

第一步,用传感器读取环境温度

然后,将温湿度数据处理,通过某种方式上传服务器。

接下来,服务器程序接收数据,并写入数据库

最后,通过网页,app或则其他方式访问数据库,获取数据并显示

做了一个简单Demo,如下:

一,获取环境温度 SHT-30+stm32 C语言

SHT-30 温湿度传感器 淘宝上都有很便宜十几,二十块节 借图如下
在这里插入图片描述
stm32 市面上流行一款微控制器(也叫单片机,或则MCU)
贵的便宜的,都有,像我这个也就十多二十块
在这里插入图片描述
单片机和传感器之间是用的I2C通信
程序写得很简单,演示一下

int main(void)
{
    delay_init();
  
    /* 串口初始化 115200 8-N-1 */
    USART_Config();
    SHT30_CheckOk();

    while(1)
    {
        // 读取温湿度
        Read_sht30();
        // 数据处理
        Convert_sht30();
        // 打印温湿度 有一个重定向在里面,把温湿度打印到串口
        printf("%f\n", tem);
        printf("%f\n", hum);
        
        delay_ms(1000);
        tem = 0;
        hum =0;
    }
}

好了温度现在就能打印到串口了,接下来就是PC机怎么接收

二,上传数据 Qt C/C++ http协议 串口收发数据

我这里只做一个简单的演示(后面应该会有详细的工程文件),没有在stm32上接其他的东西(加个wifi,3/4G模块都是可以的),就将数据通过串口发给PC,然后再PC上写个小程序接收,再通过网络发到服务器。

这个小程序是用QT来写的,主要包括两部分,串口和http(这里udp更受用点),串口将温湿度读取出来,然后使用TCP/IP这个模型将数据发送到服务器

代码大致如下(后面有完整工程):
在这里插入图片描述

/****************************接收串口数据******************************/
void MainWindow::readprotDataSlot()
{
    //读取串口数据
    QByteArray readportData = serialport->readAll();
    //readportData.data();
    //将读到的数据显示到数据接收区的te中
    //if(readportData != NULL)
    if(!readportData.isEmpty())
    {
        tem=readportData.mid(0,4);
        ui->lineEdit_tem->setText(tem);
        hum=readportData.mid(10,4);
        ui->lineEdit_hum->setText(hum);
        ui->statusBar->showMessage(QString::fromLocal8Bit("update tem and hum"));
    }

    //清除缓冲区
    readportData.clear();
}

/***************************向服务器发送数据******************************/
void MainWindow::sendportDataSlot()
{
    if((!tem.isEmpty())&&(!hum.isEmpty()))
    {
        QString msg;
        msg=QString::number(send_code)+"/"+QString::fromLocal8Bit(tem)+"/"+QString::fromLocal8Bit(hum)+"/";
        //msg="hello i am hum";
        tcpSocket->write(msg.toLatin1(),msg.length());
        ui->statusBar->showMessage(QString::fromLocal8Bit("send tem and hum"));
    }
}

在这里插入图片描述
现在数据读出来,也可以发送了

三,接收数据并储存 Linux 数据库 C语言

这里所演示的服务器程序很简单,首先就是http的基本格式,然后就C语言的while循环(下面代码仅仅是解析数据和插入数据库的函数),当有数据传上来,就解析数据,再将数据插入数据库。

//printf("Bytes:%d\n", strlen(buf));//打印接收字节数
//处理数据
char *ptr,*retptr;
char *code[MAX_SUB];
int i=0;
ptr = buf;
 
while ((retptr=strtok(ptr, "/")) != NULL)
{
    //printf("substr[%d]:%s\n", i, retptr);//打印测试
    code[i]=retptr;
    ptr = NULL;
    if(i> MAX_SUB)
    {
        i=0;
    }
    i++;
}

operation=atoi(code[0]);
tem=atof(code[1]);
hum=atof(code[2]);
//插入数据库
Insert_Humiture(tem,hum);

将数据插入数据库的函数

int Insert_Humiture(float tem, float hum)
{
      MYSQL mysql;  
    MYSQL_RES *res;  
    MYSQL_ROW row;  
    char *query;  
    int flag, t;  
    mysql_init(&mysql);  
    if(!mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 0, NULL, 0)) {  
        printf("Failed to connect to Mysql!\n");  
        return 0;  
    }else {  
        printf("Connected to Mysql successfully!\n");  
    }
      char sql_insert[200];
      sprintf(sql_insert, "insert into test values (%f, %f, now())", tem, hum);
    /*插入,成功则返回0*/  
    flag = mysql_query(&mysql, sql_insert);  
    if(flag) {  
        printf("Insert data failure!\n");  
        return 0;  
    }else {  
        printf("Insert data success!\n");  
    }  
  
  
    mysql_close(&mysql);  
    return 0;  
}

截图如下:
在这里插入图片描述
数据库,用了3个字段温度,湿度,时间,时间是主键
在这里插入图片描述
好了,最后就是显示了,这里就仅仅用个简单的网页显示

四,数据显示 HPH HTML MYSQL
在这里插入图片描述
把mysqli_connect里面的内容改一下就能用。

<?php
$con = mysqli_connect('数据库主机','用户名','数据库密码.','数据库');
if (!$con)
{
    die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"Humiture");
 
mysqli_set_charset($con, "utf8");
 
$sql = "select * from test";
$result = mysqli_query($con,$sql);
 
echo "<table border='1'>
<tr>
<th>温度</th>
<th>湿度</th>
<th>时间</th>
</tr>";
 
while($row = mysqli_fetch_array($result))
{
    echo "<tr>";
    echo "<td>" . $row['tem'] . "</td>";
    echo "<td>" . $row['hum'] . "</td>";
    echo "<td>" . $row['time'] . "</td>";
    echo "</tr>";
}
echo "</table>";
 
mysqli_close($con);
?>

原理还是很简单,就是弄得太复杂,可以用NBIOT,WIFI模块来替换上位机,更实用。

猜你喜欢

转载自blog.csdn.net/BluseLIBB/article/details/88165639