基于Arduino的温湿度上传OneNET,同时SIM900A短信报警(2)(源码)

OneNET云平台

1.云平台的创建和应用是一个复杂的过程,但中移物联网为用户提供了一个非常实用的平台,屏蔽了复杂的技术细节,用户只要在中移物联网的官网上注册一个账号后就可以进入自己的云平台的创建了,创建流程如图:
在这里插入图片描述
OneNET官网可注册账号,登录OneNET云平台后,点击进入界面上右上角的“开发者中心”,然后“添加产品”添加产品进行产品的创建,创建产品时产品的信息可以由用户自己决定,但是最后一项的网络通信格式的选择及其重要,它决定了你下位机发送数据的方式。因之前传输协议选择了HTTP,那么这里也要选择HTTP格式。

2.设备建完后,需要点击进入“设备列表”,在创建的设备后点“数据流”,进行数据流模板管理。添加数据流模板,这是Arduino进行数据传输中post请求中的数据流名称,如果没有对应的数据流,OneNET服务器就接收不到你传的数据。建立如图5.7的数据流:
在这里插入图片描述
3.之后,就是应用的创建了,创建应用时要选择将应用添加到先前创建的设备下面,完成了应用的创建就可以对其进行编辑了,有仪表盘、折线图等可以选择。为了使数据更加直观的展现在我们眼前,在应用中为每一个数据流添加显示设备。
在这里插入图片描述
4.邮箱报警功能创建,在创建的产品中点击“触发器管理”,然后“添加触发器”。可选数据流和触发条件,建立如图5.7.2的条件触发器。当其中的“humi”或“temp”达到触发条件,即“humi>80”, “temp>35”时,OneNET服务器会发送超限值的信息到设定的邮箱。
在这里插入图片描述

实物图

在这里插入图片描述

接收到的短信

在这里插入图片描述
好吧,最重要的完整代码。自己保存成相应的文件应该能用,不要弄记事本里面!

文件名:DHT11.ino
#include <Arduino.h>
#include <SoftwareSerial.h>
#include "DHT11.h"

#define fan 9                     
#define beep 10                   
DHT11 myDHT11(11);
SoftwareSerial mySerial(12, 13); // RX, TX

char ssid[] = "FENG";                        //这里填写自己的Wifi账号
char password[] = "12345678";             //这里填写自己的Wifi密码

#define DevicesID 516128482
char APIkey[] = "wsZg=kanSndl6XnjadWqwbgDi=E=";  

int temp=1;
int humi=1;

void set_ESP8266(void)
{
    Serial.begin(115200);                  //设置esp8266波特率为115200
    delay(1000);
    Serial.println("AT");                  //判断模块是否正常
    delay(1000);
    Serial.println("AT+CWMODE=3");         //设置WIFI应用模式
    delay(1000);
    Serial.println("AT+RST");              //重置WIFI模块
    delay(3000);
    Serial.print("AT+CWJAP=\"");          //连接无线路由器
    Serial.print(ssid);
    Serial.print("\",\"");
    Serial.print(password);
    Serial.println("\"");
    delay(8000);
    Serial.println("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");   //和服务器建立TCP连接
    delay(1000);
    Serial.println("AT+CIPMODE=1");       //进入透明传输模式
    delay(3000);
    Serial.println("AT+CIPSEND");         //开始传输
    delay(2000);
}

void setup()      //Arduino程序初始化程序放在这里,只在开机时候运行一次
{             
    mySerial.begin(9600);          //设置sim900a波特率为9600
    pinMode(fan,OUTPUT);           //确定引脚的功能, OUTPUT 数字输出
    pinMode(beep,OUTPUT);
    digitalWrite(fan,HIGH);       //设定风扇引脚为高电平
    digitalWrite(beep,HIGH);
    set_ESP8266();               //连网,与onenet建立连接,开启透传
}


void loop()     //Arduino程序的主程序部分,循环运行内部程序
{
    myDHT11.DHT11_Read();               //读取温湿度值
    ESP8266_SendMessage();
     
    if(myDHT11.TEM_Buffer_Int>30 || myDHT11.HUMI_Buffer_Int>50)
    {
        digitalWrite(beep,LOW);          //输出LOW电平,发声
        digitalWrite(fan,LOW);
        SIM900A_SendMessage();
    }
    else                          
    {
        digitalWrite(beep,HIGH);          //输出HIGH电平, 停止发声
        digitalWrite(fan,HIGH);
    }
    //delay(1000);        //延时1s
}

void ESP8266_SendMessage(void)           //合成post请求
{
    Serial.print("POST /devices/");
    Serial.print(DevicesID);
    Serial.println("/datapoints HTTP/1.1"); 
    Serial.print("api-key:");
    Serial.println(APIkey);  
    Serial.println("Host:api.heclouds.com");
    Serial.println("Content-Length: 59");
    Serial.println("");
    Serial.print("{\"datastreams\":[{\"id\":\"Temp\",\"datapoints\":[{\"value\":");
    Serial.print(myDHT11.TEM_Buffer_Int);
    Serial.println("}]}]}");
    delay(1000); 
  
    Serial.print("POST /devices/");
    Serial.print(DevicesID);
    Serial.println("/datapoints HTTP/1.1"); 
    Serial.print("api-key:");
    Serial.println(APIkey);  
    Serial.println("Host:api.heclouds.com");
    Serial.println("Content-Length: 59");
    Serial.println("");
    Serial.print("{\"datastreams\":[{\"id\":\"Humi\",\"datapoints\":[{\"value\":");
    Serial.print(myDHT11.HUMI_Buffer_Int);
    Serial.println("}]}]}");
    delay(1000); 
}

void SIM900A_SendMessage()
{
  mySerial.print("AT+CSCS=\"GSM\"\r\n");              //设置GSM字符集
  delay(1000);
  mySerial.print("AT+CMGF=1\r\n");                   //设置为文本模式
  delay(1000);      
  mySerial.print("AT+CMGS=\"18888888888\"\r\n");    //设置手机号
  delay(1000);
  mySerial.print("HUMI = ");
  mySerial.print(myDHT11.HUMI_Buffer_Int);
  mySerial.println(" %RH");
  mySerial.print("TMEP = ");
  mySerial.print(myDHT11.TEM_Buffer_Int);
  mySerial.println(" ℃");
  delay(1000);
  mySerial.write(0x1A);     //“CTRL+Z”的键值,即用于告诉SIM900A,要执行发送操作   (HEX)格式单独发送
  delay(1000);
}
库文件:DHT11.h
#ifndef __DHT11_H__
#define __DHT11_H__
#include <Arduino.h>
class DHT11
{
public:
	DHT11(int pin);
	void DHT11_Init();
	unsigned char DHT11_Read_Byte();
	void DHT11_Read();

	unsigned char HUMI_Buffer_Int;
	unsigned char TEM_Buffer_Int;
private:
	int DHT11_DQ;
};
#endif
库文件:DHT11.cpp
#include "DHT11.h"
//定义变量
unsigned char HUMI_Buffer_Int = 0;
unsigned char TEM_Buffer_Int = 0;

DHT11::DHT11(int pin)
{
	DHT11_DQ = pin;
}
//****************************************************
//初始化DHT11
//****************************************************

void DHT11::DHT11_Init()
{
	pinMode(DHT11_DQ,OUTPUT);
	digitalWrite(DHT11_DQ,LOW);  //拉低总线,发开始信号;
	delay(30);  //延时要大于 18ms,以便 DHT11 能检测到开始信号;
	digitalWrite(DHT11_DQ,HIGH);
	delayMicroseconds(40);  //等待 DHT11 响应;
	pinMode(DHT11_DQ,INPUT_PULLUP);
	while(digitalRead(DHT11_DQ) == HIGH);
	delayMicroseconds(80);   //DHT11 发出响应,拉低总线 80us;
	if(digitalRead(DHT11_DQ) == LOW);
	delayMicroseconds(80);   //DHT11 拉高总线 80us 后开始发送数据;
}

//****************************************************
//读一个字节DHT11数据
//****************************************************
unsigned char DHT11::DHT11_Read_Byte()
{
	unsigned char i,dat = 0;
	unsigned int j;

	pinMode(DHT11_DQ,INPUT_PULLUP);
        delayMicroseconds(2);
	for( i=0; i<8; i++)
	{
			while(digitalRead(DHT11_DQ) == LOW);   //等待 50us;
			delayMicroseconds(40);   //判断高电平的持续时间,以判定数据是‘0’还是‘1’;
			if(digitalRead(DHT11_DQ) == HIGH)
				dat |= (1<<(7-i));   //高位在前,低位在后;
			while(digitalRead(DHT11_DQ) == HIGH);   //数据‘1’,等待下一位的接收;

	}
	return dat;
}
//****************************************************
//读取温湿度值,存放在TEM_Buffer和HUMI_Buffer
//****************************************************
void DHT11::DHT11_Read()
{
	DHT11_Init();
	HUMI_Buffer_Int = DHT11_Read_Byte();   		//读取湿度的整数值
	DHT11_Read_Byte();							//读取湿度的小数值
	TEM_Buffer_Int = DHT11_Read_Byte();			//读取温度的整数值
	DHT11_Read_Byte();							//读取温度的小数值
	DHT11_Read_Byte();							//读取校验和
	delayMicroseconds(50);						//DHT11拉低总线50us
	pinMode(DHT11_DQ,OUTPUT);
	digitalWrite(DHT11_DQ,HIGH);				//释放总线	
}

附上我的onenet应用

  • 13
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
### 回答1: 要使用ArduinoSIM900A发送短信,需要先连接SIM900A模块到Arduino板上。然后,使用AT指令来控制SIM900A模块发送短信。以下是一个示例代码: ``` #include <SoftwareSerial.h> SoftwareSerial SIM900A(7, 8); // RX, TX pins void setup() { SIM900A.begin(960); // 初始化串口通信 delay(100); SIM900A.println("AT+CMGF=1"); // 设置短信格式为文本模式 delay(100); } void loop() { SIM900A.println("AT+CMGS=\"+86138xxxxxxxx\""); // 设置短信接收者的电话号码 delay(100); SIM900A.print("Hello, this is a test message."); // 设置短信内容 delay(100); SIM900A.write(x1A); // 发送短信 delay(100); } ``` 在代码中,首先使用SoftwareSerial库初始化串口通信,并设置SIM900A模块的短信格式为文本模式。然后,在循环中,使用AT指令设置短信接收者的电话号码和短信内容,并发送短信。注意,在发送短信时,需要使用x1A字符表示发送结束。 ### 回答2: Arduino作为一种易于使用的开源平台,常被用来搭建各种小型电子项目。其中,利用ArduinoSim900A模块发送短信则是一个非常有趣实用的应用。在这个项目中,我们可以实现通过ArduinoSim900A模块向指定的手机号码发送短信。 在开始这个项目之前,我们需要准备好以下的材料: 1、Arduino开发板 2、Sim900A GSM模块 3、SIM卡 4、Jumper线 5、USB电缆和计算机连接 接下来,我们需要进行如下步骤: 1、将Sim900A模块连接到Arduino开发板上。连接方式如下: GSM模块 RXD ----------- Arduino TX (Digital Pin 1) GSM模块 TXD ----------- Arduino RX (Digital Pin 0) GSM模块 GND ----------- Arduino GND GSM模块 VCC ----------- Arduino 5V 2、将Sim卡插入Sim900A模块。 3、将Arduino开发板通过USB电缆连接到计算机中。 4、在Arduino开发环境中,打开源代码编辑器。我们将在这里编写代码,让Sim900A模块发送短信。 5、创建一个新的源代码文件,并将以下代码复制并粘贴进去: #include <SoftwareSerial.h> SoftwareSerial mySerial(1, 0); // RX, TX void setup() { Serial.begin(9600); mySerial.begin(9600); // SIM900A模块通过软串口(Software Serial)与Arduino通讯 delay(5000); // 为了等待SIM900A模块完成启动,我们需要先延时几秒钟。 mySerial.println("AT+CMGF=1\r"); // 将SIM900A设为文本模式 delay(1000); // 以下是设置短信参数 mySerial.println("AT+CMGS=\"+xxxxxxxxxx\"\r"); // xxxxxxxxxx表示接收者的手机号码 delay(1000); // 输入短信内容,并发送 mySerial.println("Hello! This is a test message from Sim900A via Arduino."); delay(1000); mySerial.println((char)26); // 按Star键输出,发送短信 delay(1000); mySerial.println(); } void loop() { if(mySerial.available()) Serial.write(mySerial.read()); if(Serial.available()) mySerial.write(Serial.read()); } 6、在代码中设置了接收者的手机号码并输入了短信内容。在这个例子中,短信内容是“Hello! This is a test message from Sim900A via Arduino.”。你可以修改这些信息,根据自己的需要设计不同的发送短信内容。 7、在Arduino的菜单中选择文件 -> “上传”(或者Cmd + U),将代码上传到开发板上。 8、如果一切正常,Sim900A模块就会向绑定的手机号码发送以前设定的短信内容。如果有任何问题,你可以检查连接,查看串口调试工具等等,确定问题所在。 通过上述步骤,我们可以完成在Sim900AArduino开发板之间通过软串口发送短信的过程,达到向指定手机号码发送指定内容短信的目的。 ### 回答3: Arduino是一款广泛应用于物联网领域的开发板,可以通过各种传感器和模块来实现各种功能SIM900A是一款基于GSM/GPRS技术,适用于全球各地的无线通信模块。ArduinoSIM900A的结合可以实现利用SIM900A发送短信功能。下面,我将详细介绍如何利用ArduinoSIM900A发送短信。 准备工作: 1. Arduino板一个 2. SIM900A模块一个 3. 其他相关电子元件:连接线、电容、电阻等 4. 一张SIM卡 步骤: 1. 连接SIM900A模块和Arduino板,具体连接方案可以上网搜索。 2. 添加对应的库,保证程序能顺利运行。 3. 在Arduino IDE编写程序,将SIM900A的AT指令封装成Arduino函数,从而简化控制SIM900A的过程。 4. 打开串口监视器,并通过AT指令控制SIM900A进行初始化。 5. 通过AT指令设置短信中心号码、发送短信。 6. 关闭串口监视器。 通过以上步骤,即可实现利用ArduinoSIM900A发送短信功能。如果你已经掌握了Arduino基础,那么学习使用SIM900A发送短信的过程也不会太过困难。在实际应用中,需要注意安全和保密性问题,比如将SIM卡锁定、设置短信加密等。 类似于这样的控制器是物联网建设的重要组成部分,也是未来发展的重要方向,对于Arduino物联网开发感兴趣的小伙伴们,不妨跟着这个教程深入理解一下利用Arduino实现SIM900A短信功能的具体过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

觅梦_feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值