获取传感器数据并传入数据库-HTTP/POST/ASP.NET

很久前,做过传感器数据采集相关的小项目,需求是通过单片机IO收集传感器数据,然后通过网络模块(GSM/WI-FI)作为客户端,将数据(JSON)通过TCP/IP协议上传至服务器TCP端口。同时,服务器上运行监听程序,解析JSON随后转存到数据库。

这种模式在实际应用中的效果并不理想,当时遇到的问题有:

Client/Server之间建立连接需要较长时间。 需要维持心跳,如果使用GSM模块会产生较多数据流量。 Server需要监听/解析/转存TCP端口数据的程序,如果数据量较大,稳定性未知。

最近想到用HTTP POST请求,将传感器获取的数据直接POST到Web服务器后,通过后台服务处理存储到数据库,且现在部分项目获取传感器数据后有通过Web方式展现(数据可视化)的需求,编码简单,逻辑清晰。

建立数据库

Web服务端(ASP. NET)

建立ASP.NET空网站,目标框架 .NET Framework4.0,添加一个Web服务。

这里的WebService.asmx作为之后的请求接口

using System;

using System.Data;

using System.Configuration;

using System.Data.SqlClient;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

///

/// WebService 的摘要说明

///

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。

// [System.Web.Script.Services.ScriptService]

public class WebService : System.Web.Services.WebService

{

SqlConnection con;//创建连接对象

SqlCommand sc;

public WebService()

{

//如果使用设计的组件,请取消注释以下行

//InitializeComponent();

}

#region 接口测试

[WebMethod]

public void test(string data)

{

string strsql = ConfigurationManager.ConnectionStrings["sqlserverconfig"].ToString();//读取webconfig数据库连接字符串

con = new SqlConnection(strsql);

//添加一条数据记录

string sql = "insert into SensorData (ID,DeviceID,Data,AddTime) Values (1,1,'" + data + "','" + DateTime.Now.ToString() + "')";

try

{

con.Open();//打开连接对象

sc = new SqlCommand(sql, con);//执行SQL

int i= sc.ExecuteNonQuery();//影响的记录条数

con.Close();//关闭对象

}

catch (Exception ex)

{

ex.ToString();

con.Close();

}

}

#endregion

}

对Web.config加入跨域请求说明和允许远程调试说明

此时我们调试WebService.asmx中的test,测试调用。

此时,对应表中会看到新增加的测试记录,至此Web服务器端已经完毕,接下来将其部署到IIS,并运行WebService.asmx。

Arduino+Wi-Fi(ESP8266)HTTP协议发送POST请求

硬件准备:

Arduino UNO ESP 8266 可选的数字传感器(如温湿度、电压电流计) Arduino ESP-8266 3.3V 3.3V GND GND 12 RX 13 TX

#include

SoftwareSerial mySerial(13, 12); // RX, TX

//--------------参数设置 START-------------

String Host="192.168.31.32";//域名或IP

String Port="80";//IIS端口,默认80

String URL="/DataSender/WebService.asmx/test";//接口地址

String Data="data=8888";//请求参数,前半部分必须与WebService.asmx中test方法参数名对应(String data)

String WiFi_SSID="BS-112-Lab";

String WiFi_PSW="i-am-wifi-psw";

//--------------参数设置 END---------------

void setup() {

Serial.begin(57600);//本地调试串口

while (!Serial) {//等待连接

}

mySerial.begin(57600);//软串口

initWifi();//初始化Wi-Fi SSID/PSW

setHttpServer();//设置发送模式

}

void loop() {

if (mySerial.available()) {

Serial.write(mySerial.read());//数据回显

}

if (Serial.available()) {

mySerial.write(Serial.read());

}

postToServer(Data);

}

void Response(){//接受服务器的响应并显示在本地串口

delay(50);

while (mySerial.available()) {

Serial.write(mySerial.read());

}

Serial.write("\n");

}

void initWifi(){

mySerial.println("AT+RST"); // 重启模块

delay(1000);

Response();

mySerial.println("AT");//测试通信,返回OK

Response();

delay(1000);

mySerial.println("AT+CWMODE=3"); // 设置ESP8266模块处于AP兼Station模式

Response();

mySerial.println("AT+CWJAP=\""+WiFi_SSID+"\",\""+WiFi_PSW+"\""); // 连接Wi-Fi

Response();

delay(10000);

}

void setHttpServer(){

mySerial.println("AT+CIPMODE=1");

mySerial.println("AT+CIPSTART=\"TCP\",\""+Host+"\","+Port+""); // 连接服务器的80端口

delay(1000);

Response();

mySerial.println("AT+CIPSEND"); // 进入TCP透传模式,接下来发送的所有消息都会发送给服务器

}

void postToServer(String paras){

//组装HTTP报头

String httpContent="POST "+URL+" HTTP/1.1\r\nHost: "+Host+"\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length:"+paras.length()+"\r\n\r\n"+paras;

Serial.print("==============\nPost Data: "+paras+"\n");

mySerial.print(httpContent); //POST

delay(2000);//POST请求频率,建议2s,小于这个时间建议调高波特率。

Response();

}

烧录代码至Arduino,打开串口监视器即可看到数据发送状态、POST报文和服务器响应。

根据AddTime字段的情况来看,POST的频率可以到每秒两条,效果还是非常理想的。

代码量统计

Arduino: 70行 WebService.asmx:50行

不足150行便实现了传感器数据上传到数据库的流程,可见这种方法短小精悍。

传感器连接mysql_获取传感器数据并传入数据库-HTTP/POST/ASP.NET相关推荐

  1. android开发中磁场传感器,Android开发获取传感器数据的方法示例【加速度传感器,磁场传感器,光线传感器,方向传感器】...

    本文实例讲述了Android开发获取传感器数据的方法.分享给大家供大家参考,具体如下: package mobile.android.sensor; import java.util.List; im ...

  2. 【Luat-air551G】4 air551G连接esp32获取GGA数据

    1 前言 本文简单介绍下如何从air551G提取经度纬度数据. 2 硬件连接 连接方式如图. 3 获取uart数据 tag_uart = "test5_uart"id = 1 le ...

  3. android传感器学习之获取传感器的值

    在上一篇中,讲到了怎么获取手机的传感器http://blog.csdn.net/nainai007/article/details/7615364,在这里是获取传感器的值. 要获取传感器的值,首先要为 ...

  4. android传感器 列表,android获取传感器列表

    本文介绍如何获取android设备所支持的传感器列表. 目前,android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于 ...

  5. 股票数据 mysql_获取股票数据(历史数据,Python + MySQL)

    从互联网(网易数据接口)获取股票历史数据,包括开盘价.最高价.最低价.收盘价等等 环境 Python 3.6 MySQL 5.6.34 table: stock_list 记录数:3592 条,以该表 ...

  6. dapper 连接mysql_使用Dapper访问SQL Server数据库

    对应Demo程序名:DapperDemo 准备工作:为项目安装Dapper类库 方法一:项目中添加:项目名右键:Manage NuGet Packages:搜索Dappe:点击安装 方法二:在NuGe ...

  7. 如何将数据存入mysql_怎样将数据存入mysql数据库

    怎样将数据存入mysql数据库 mip版  关注:231  答案:2  悬赏:80 解决时间 2021-01-18 14:57 已解决 2021-01-17 20:37 怎样将数据存入mysql数据库 ...

  8. ajax连接服务器获取后台数据

    初识服务器 服务器的分类: 按服务类型:文件服务器.数据库服务器.邮件服务器.Web 服务器. 按操作系统:Linux服务器.Windows服务器. 按应用软件 : Apache服务器.Nginx 服 ...

  9. python自动获取邮件数据_Python 提取数据库(Postgresql)并邮件发送

    刚入门python,发现确实是一个不错的语言. 业务部门要求将将某一个数据库中的表,定期发送到相关部门人员邮箱. 其实整个业务需求很简单,实现起来也不难. 但是由于刚入门python,所以还是借鉴了不 ...

最新文章

  1. xpath 获取当前节点的父节点,兄弟节点的方法
  2. 转: linux下的自动对时
  3. 听说英飞凌内推技术岗位有大额奖金
  4. Java中的某些接口为什么没有任何方法?
  5. linux+网络根文件系统,认识Linux根文件系统结构
  6. VHDL | 音乐盒设计(代码类)
  7. 误泄露公司代码、疫情期间被裁,一个“菜鸟”程序员的生存日记
  8. 6.4 Ext.core.DomQuery 单实例查询选择器,通过正则表达式查找DOM或者HTM
  9. 路径规划之曲线插值拟合算法分析
  10. java 内存 min_Java内存区域
  11. 华为系统移动数据连接到服务器,怎样设置手机数据连接到服务器配置
  12. 易语言怎么判断文件是否一样_怎么判断自己是否怀孕?
  13. Java语言基础--集合
  14. Julia :where
  15. zynq-7000系列基于zynq-zed的vivado初步设计之使用jtag-uart(MDM)
  16. 【视频教程】帝国CMS制作网站系列教程08—单页模板的制作
  17. 106短信平台备受欢迎的原因
  18. 第一期:[开眼界] Android P预览版都有哪些设计新鲜事
  19. 网络重置最详细解决方法
  20. Python Spider: 爬取项目外包网站TaskCity

热门文章

  1. 知识付费小程序源码可开流量主
  2. 画坦克__线程__V1__第一种方法创造线程
  3. Neo4j之CQL基础
  4. android keystore 查看、修改密码和别名等
  5. (项目名).exe”。已加载符号。 无法查找或打开 PDB 文件。
  6. Stimulsoft新版本2022.4 版本正式发布|附免费下载试用
  7. 7-32 哥尼斯堡的“七桥问题” (欧拉回路)(PAT算法题目集)
  8. mysql条件关键字查询有limt_MySQL使用Limit关键字限制查询结果的数量-Go语言中文社区...
  9. Python中的立方根
  10. jenkins自动打包报错:cannot find symbol