산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

SMS 온도 회신

구성품 및 소모품

Arduino Mega 2560
× 1
DHT22 온도 센서
× 1
SIM800L
× 1
저항 10k 옴
× 1
브레드보드(일반)
× 1
점퍼 와이어(일반)
× 1

이 프로젝트 정보

여보세요. 이 프로젝트는 훨씬 더 큰 프로젝트의 일부입니다. 이 부분에 대해 많은 문제가 있었고 결국 해결책을 찾았기 때문에 커뮤니티와 공유하기로 결정했으며 프로젝트에 도움이 되기를 바랍니다.

프로젝트 설명

Arduino에 SMS를 보내고 집에서 온도를 확인하십시오.

소프트웨어

SIM800L 모듈의 경우 "Seeeduino_GPRS-master" 라이브러리를 사용했습니다. MEGA에서 작동하려면 "sim800.h" 라이브러리에서 다음 줄을 변경해야 했습니다.

#define SIM800_TX_PIN 8#define SIM800_RX_PIN 7 

...TX_PIN 10 및 RX_PIN 11로. 라이브러리를 "SoftwareSerial"에서 Mega Serial 포트 중 하나로, 즉 Serial3 중 하나로 변경하는 것이 너무 어려워서 쉬운 방법을 택했습니다.

문제

기본적으로 내 코드는 "DHT.h" 및 "Seeeduino_GPRS-master"의 두 라이브러리에서 예제를 잘라내어 붙여넣습니다. 내가 가진 문제는 "gprs.h" 예제가 미리 정해진 메시지를 따옴표로 묶는 방법만 보여주었다는 것입니다. 내 온도 센서에서 가변 float 값을 보내는 방법을 알아낼 수 없었습니다. 이것은 내가 시도한 다른 라이브러리에서도 마찬가지였습니다:"GPRS_SIM900-master" 및 "SIM800L-master" .

나는 내 문제를 해결하기 위해 웹을 검색하는 데 몇 주를 보냈지만 아무 것도 찾지 못했습니다. 나는 같은 주제에 대한 포럼 게시물을 찾았고, 답변을 얻지 못한 불쌍한 영혼들을 위해 이 게시물을 찾으시기 바랍니다.

답변

float 값을 String으로 변환한 다음 String을 Char Array로 변환 - 간단합니다!

코드 조각

<사전><코드> MyString =String(temp,0); // float를 StringMyString으로 변환 =(MyString + " Degrees C");// 문자열을 char로 변환은 여기에서 시작합니다.// Length(null 종결자에 대해 하나의 추가 문자 포함)int str_len =MyString.length() + 1; // 문자 배열(버퍼) 준비 char char_array[str_len];// MyString.toCharArray(char_array, str_len);//문자열을 char로 변환합니다. heregprs.sendSMS("04+++++++ +",char_array); //전화번호와 텍스트를 정의합니다.

배선

SIM 모듈에 전원을 공급하기 위해 ULTRAFIRE 18650 배터리를 사용했습니다. 나중에 회로에 전압 조정기를 추가하겠습니다. 이 튜토리얼을 참조하십시오.

참고 자료

<울>
  • http://www.ayomaonline.com/programming/quickstart-sim800-sim800l-with-arduino/
  • <울>
  • https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf
  • 라이브러리

    <울>
  • https://github.com/Seeed-Studio/Seeeduino_GPRS
  • <울>
  • https://github.com/adafruit/DHT-sensor-library
  • <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • DHT_SIMPosting.ino
  • DHT_SIMPosting.ino아두이노
    SMS "InTemp"는 온도를 요청하고 Arduino 응답은 C.
    // 다양한 DHT 습도/온도 센서에 대한 테스트 스케치 예제// 작성:ladyada, public domain#include "DHT.h#define DHTPIN 2 // 어떤 디지털 핀에 연결했는지#define DHTTYPE DHT22 // DHT 22(AM2302), AM2321//#define DHTTYPE DHT21 // DHT 21(AM2301)// 센서의 핀 1(왼쪽)을 연결합니다. +5V// 센서의 핀 2를 DHTPIN에 연결합니다.// 센서의 핀 4(오른쪽)를 GROUND에 연결합니다.// 10K 저항을 핀 2(데이터)에서 핀 1(전원)에 연결합니다. sensor // DHT를 초기화합니다. sensor.DHT dht(DHTPIN, DHTTYPE);#include #include #define TIMEOUT 5000GPRS gprs;bool ITemp =false;float temp;String MyString;#define LED_PIN 13bool ledStatus;//SIM800char currentLine[500] ="";int currentLineIndex =0;//메시지 알림이 발견되고 직렬 출력의 다음//라인이 다음과 같은 경우 true로 설정되는 부울 실제 SMS 메시지 contentbool nextLineIsMessage =false;void 응답()// 여기에서 기능 시작{ Serial.println("GPRS - SMS 테스트 보내기 ..."); gprs.preInit(); 지연(1000); 동안(0 !=gprs.init()) { 지연(1000); Serial.print("초기화 오류\r\n"); } Serial.println("초기화 성공, SMS 메시지 보내기 시작..."); if (ITemp ==true){ float t =dht.readTemperature(); 온도 =t; ITemp =거짓; } MyString =문자열(임시,0); // float를 String으로 변환 MyString =(MyString + " Degrees C"); // 문자열을 char로 변환은 여기에서 시작합니다. // 길이(널 종결자에 대해 하나의 추가 문자 포함) int str_len =MyString.length() + 1; // 문자 배열(버퍼) 준비 char char_array[str_len]; // MyString.toCharArray(char_array, str_len)에 복사합니다. // 여기서 문자열을 char로 변환합니다. gprs.sendSMS("04++++++++",char_array); //전화번호 및 텍스트 정의 // 여기서 함수 종료}void setup() { Serial.begin(9600); Serial.println("DHTxx 테스트!"); dht.begin(); gprs.preInit(); 지연(1000); 동안(0 !=gprs.init()) { 지연(1000); Serial.print("초기화 오류\r\n"); //나중에 Nextion HMI 홈 페이지에 SIM 오류 표시 } //SMS 모드를 ASCII로 설정 if(0 !=gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) { ERROR( "오류:CNMI"); 반품; } //새 SMS 메시지 표시 수신 시작 if(0 !=gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) { ERROR(" 오류:CNMI"); 반품; } Serial.println("Init success");}void loop() { // 측정 사이에 몇 초를 기다립니다. 지연(2000); // 온도 또는 습도를 읽는 데 약 250밀리초가 걸립니다! // 센서 판독값은 최대 2초가 될 수도 있습니다. '오래된'(매우 느린 센서) float h =dht.readHumidity(); // 온도를 섭씨로 읽습니다(기본값) float t =dht.readTemperature(); Serial.print("습도:"); Serial.print(h); Serial.println(" %\t"); Serial.print("온도:"); Serial.print(t); Serial.println(" *C "); SIM();}void SIM(){ //현재 상태를 LED 핀에 씁니다. digitalWrite(LED_PIN, ledStatus); Serial.println("SMS를 찾고 있습니다"); //SIM800에서 직렬 출력이 있는 경우 if(gprs.serialSIM800.available()){ char lastCharRead =gprs.serialSIM800.read(); //\r 또는 \n에 도달할 때까지 직렬 출력에서 ​​각 문자를 읽습니다(줄 끝을 나타냄) if(lastCharRead =='\r' || lastCharRead =='\n'){ String lastLine =String(currentLine); //마지막 줄이 +CMT이면 새 SMS 메시지 표시가 수신되었습니다. //따라서 다음 줄은 메시지 내용입니다. if(lastLine.startsWith("+CMT:")){ Serial.println(lastLine); nextLineIsMessage =참; } else if (lastLine.length()> 0) { if(nextLineIsMessage) { Serial.println(lastLine); //메시지 내용을 읽고 SMS 내용에 따라 상태를 설정 if(lastLine.indexOf("InTemp")>=0){ Serial.println("InTemp"); ITemp =참; 회신하다 (); // ledStatus =1; // Serial.println("조명 켜기"); // } else if(lastLine.indexOf("LED 꺼짐")>=0) { // ledStatus =0; // Serial.println("조명 끄기"); } nextLineIsMessage =거짓; } } //읽을 다음 줄에 대한 문자 배열 지우기 for( int i =0; i   

    회로도


    제조공정

    1. 온도 제어 팬
    2. 라즈베리 파이 온도 로거
    3. DS18B20으로 온도 읽기 | 라즈베리 파이 2
    4. Raspberry Pi의 온도 모니터링
    5. RASPBERRY PI로 온도 측정
    6. Raspberry Pi로 온도 모니터링
    7. IoT 101 프로젝트:Raspberry Pi의 스트림 온도
    8. 실험실 '기상 관측소'
    9. 라즈베리 파이 온도 센서
    10. Rover