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

1、系统总体设计方案

Arduino判断,DH11温湿度传感器采集的数据。ESP8266模块连接WiFi,将数据按post协议上传至OneNET服务器,用户可在平台实时查看温湿度数据。设定温湿度值上限与下限,若温湿度数据超过设定范围,则开启风扇,同时触发蜂鸣器报警,使用SIM900A模块发送短信到指定的手机号。
硬件结构:
硬件结构

2、各模块设计

Arduino管脚图如图所示:
在这里插入图片描述
Arduino Uno可通过USB连接或者外部电源供电。外部(非USB)电源可以是AC-DC适配器,也可以是电池。电路板可由6-20V外部电源供电。然而,如果电源电压低于7V,那么5V引脚可能会提供低于5V的电压,电路板也许会不稳定。如果电源电压超过12V,稳压器可能会过热,从而损坏电路板。电压范围建议为7~12V。

(1)温湿度传感器

Arduino单片机和DHT11传感器之间只要连一个数字口,DATA接11口就可以了(随便你定义)。DHT11传感器的引脚VCC可以接Arduino 的5V供电,GND脚接Arduino的地,空脚悬空不接。
在这里插入图片描述

#include "dht11.h"
DHT11 myDHT11(11);
int temp=1;
int humi=1;
myDHT11.DHT11_Read();               //读取温湿度值

这是部分代码,dht11的库是网上找的一个,调用就可以了。

(2)esp8266模块

将WiFi模块的VCC和CH_PD端共接电源5V,将WiFi模块的GND接GND。模块URXD接Arduino开发板的TXD,UTXD接Arduino开发板的RXD。自带有一个信号指示灯和一个电源指示灯。在接上正确的电源后,红灯长亮,表示模块已经开始工作。在串口发送AT指令或者数据时,WiFi模块的蓝色指示灯会轻微的闪烁后熄灭。
在这里插入图片描述
串口初始化需要对相应的寄存器进行初始化,在这里我设置其串口波特率为115200
Serial.begin(115200);
向OneNET云平台发送HTTP数据包时,要包含设备ID和APIKEY,这里我在程序开始就设置,而不是在post请求中就是为了方便修改。用如下函数即可:

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

编辑函数set_ESP8266(),由AT命令使WiFi连接路由器和OneNET云平台

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

合成POST请求。固定的POST头部加之前设定的设备ID和APIKEY,然后调用温度函数,把温度加进请求。最后要注意的是预先设定整个POST包的长度,长度错误是传不上去数据的。

void ESP8266_SendMessage(void){
    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("}]}]}");
}

我的代码中的POST包的长度是写死的59位,传的是两位的温度和湿度,如果传一位数会传不上。可以自己改改加个计算长度的

   int chang;
   String fa;
   fa = "{\"X_Acceleration\": " + APIkey + ",\"Y_Acceleration\": " +String(AngleY)+",\"Z_Acceleration\": "+String(AngleZ)+"}";//定义发送数据格式
    chang = fa.length();//获取发送数据长度
(3)SIM900A短信模块

模块使用的SIM卡是标准大小,也就是俗称的大卡其它的型号可以使用SIM卡卡套。
模块需要5V供电,本设计USB提供5V电源和接地。接线引脚:
Arduino SIM900A
5V -> 5V 供电
GND -> GND 电源地
TXD -> 5VRXD 模块接收
RXD -> 5VTXD 模块发送
在这里插入图片描述
主循环中使用if函数判断温湿度值是否超限,超限就调用SIM900A_SendMessage()函数发送短信报警。因网络延迟和处理速度,每次命令发送后应该延时几秒等待响应。

mySerial.begin(9600);          //设置sim900a波特率为9600
if(myDHT11.TEM_Buffer_Int>30 || myDHT11.HUMI_Buffer_Int>50)
{
        SIM900A_SendMessage();
}
void SIM900A_SendMessage()
{
  mySerial.print("AT+CSCS=\"GSM\"\r\n");              //设置GSM字符集
  mySerial.print("AT+CMGF=1\r\n");                   //设置为文本模式
  mySerial.print("AT+CMGS=\"18888888888\"\r\n");    //设置手机号
  mySerial.print("HUMI = ");
  mySerial.print(myDHT11.HUMI_Buffer_Int);
  mySerial.println(" %RH");
  mySerial.print("TMEP = ");
  mySerial.print(myDHT11.TEM_Buffer_Int);
  mySerial.println(" ℃");
  mySerial.write(0x1A);     //“CTRL+Z”的键值,执行发送操作   (HEX)格式单独发送
}
(4)风扇模块

使用5v小风扇控制温湿度,使用汇科4100F-DC5V-SHG继电器组成控制电路,做控制开关。
继电器引脚1 3是常开点,2 5是线圈,6 4是常闭点。风扇负极接地,正极接继电器1脚,2、3脚接5V供电,5脚接Arduino控制口9。
在这里插入图片描述

(5)蜂鸣器模块

通过驱动电路控制蜂鸣器,使用的材料有1K欧姆电阻、PNP型三极管(型号8550)和有源蜂鸣器。三极管的B脚,就是基极通过一个1K欧姆电阻接到Arduino开发板的输出端口10,A脚是集电极要接地,C脚发射极接有源蜂鸣器的负极,而蜂鸣器的正极接5V供电。
在这里插入图片描述

  1. 三极管就相当于电路开关,当Arduino的10口输出高电平,三极管A极与C极间没有电压差,三极管A极与C极间不通,电流不通过有源蜂鸣器,蜂鸣器不响。
  2. 当开发板输出低电平,三极管A极与C极间就会形成电压差,令A极与C极导通,电流就会通过有源蜂鸣器,并立即发声。

噢噢最后还有个云平台的设置,完整的代码就放到下一篇里面了。

  • 6
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答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短信功能的具体过程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

觅梦_feng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值