Arduino+GPRS 远程数据采集系统

arduino笔记40:GSM/GPRS/GPS DEMO + 几种通信方式 一、准备:明确概念 GPS GPS(Global Positioning System)全球定位系统。是一个属于美国的卫星导航系统。 GPS可以提供车辆定位、防盗、反劫、行驶路线监控及呼叫指挥等功能。要实现以上所有功能必须具备GPS终端、传输网络和监控平台三个要素。 GSM 全球移动通信系统(Global System for Mobile Communications) ,缩写为GSM,由欧洲电信标准组织ETSI制订的一个数字移动通信标准。它的空... 阅读详情

                                    【爱好者】Arduino+GPRS 的环境监控方案




本实采用的硬件,除了一个串口模块以外(约200元),其他均可以从taobo上面找到标准产品

发帖子不是为了买模块,如果不愿意用gprs的可以用w5100(以太网)替代,见帖子  http://www.lewei50.com/dev/doc/94  

比较有意思的地方:可以通过手机app,微信随时掌控监测数据的情况。

------------------------------------------------------------------------万恶的分界线------------------------------------------------------------------------------------
使用乐为物联GPRS模块搭建远程环境监测系统

1 目的
试验基于Arduino硬件平台,采用乐为物联GPRS模块监控不具备有线网络接入条件的山区环境,可以用于农业、林业数据采集。


2 实验条件
硬件设备列表:
1) Arduino Nano约50RMB,


2) 乐为物联GPRS模块为测试版(必要的GPRS资费SIM卡),


3) DSM501A模块约30RMB,颗粒物传感器,目的在于监测花粉浓度,PWM输出,



4) HTF3223LF模块23RMB,用于监测空气温湿度,NTC温度输出(试验采用10k上拉),湿度频率输出,

5) BH1750模块13RMB,监测光照强度,I2C输出,


6) 降雨传感器,大约10元,用于监测降雨情况,逻辑电平输出,


7) LCD1602,大约10元,


数据系统平台:乐联网 http://www.lewei50.com

3 硬件连线

1) 乐为物联GPRS模块为6脚,本次只用1、2、3、4脚,1脚为Vcc接电源5-12伏输入,2脚为接地,3脚为TTL电平TX,4脚为TTL电平RX。
2) DSM501A,本次只使用2、3、5脚,2脚为Vout 2 output (PWM)接Arduino D8, 3脚为Vcc接电源5伏,5脚为GND接地。
3) HTF3223LF模块,使用1、2、3、4脚,1脚为NTC输出端,接Arduino A0,2脚为GND接地,3脚为湿度频率输出,接Arduino D2,4脚为Vcc接电源5伏。
4) BH1750模块为5脚,I2C接口,本次不用接ADD脚,VCC接电源5伏,SCL接Arduino A5,SDA接Arduino A4,GND接地。
5) 降雨传感器为4脚,逻辑输出接Arduino D10,VCC接电源5伏,GND接地。
6) LCD1602,本次采用4数据线连接法,RS 接Arduino D12,Enable接Arduino D11, LCD D4接Arduino D4,LCD D5接Arduino D5,LCD D6接Arduino D6,LCD D7接Arduino D7,LCD R/W 接地,LCD V0接10k可调电阻,LCD使用5伏供电,背景灯可设开关。

 

XML/HTML代码
  1. #include<string.h>  
  2.    
  3. //#include <SoftwareSerial.h>  
  4.    
  5. #include <Wire.h>  
  6.    
  7. #include <math.h>  
  8.    
  9. //#include <MsTimer2.h>  
  10.    
  11. #include <LiquidCrystal.h>  
  12.    
  13. LiquidCrystal lcd(12, 11, 4, 5, 6, 7);  
  14.    
  15. //* LCD RS pin to digital pin 12  
  16.    
  17. // * LCD Enable pin to digital pin 11  
  18.    
  19. // * LCD D4 pin to digital pin 4  
  20.    
  21. // * LCD D5 pin to digital pin 5  
  22.    
  23. // * LCD D6 pin to digital pin 6  
  24.    
  25. // * LCD D7 pin to digital pin 7  
  26.    
  27. // * LCD R/W pin to ground  
  28.    
  29. // * 10K resistor:  
  30.    
  31. // * ends to +5V and ground  
  32.    
  33. // * wiper to LCD VO pin (pin 3)  
  34.    
  35. //SoftwareSerial mySerial(9, 10); // RX, TX  
  36.    
  37. //String inputString = "";  
  38.    
  39. const int buttonPin = 10;     //the number of the jiangyu input pin  
  40.    
  41. int buttonState = 0;         // variable for reading the jiangyu status  
  42.    
  43. int Rain = 1;  
  44.    
  45. int BH1750address = 0x23;//BH1750 I2C地址  
  46.    
  47. byte buff[2];  
  48.    
  49. float BH = 0;  
  50.    
  51. const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to//*//Freqinput pin D2  
  52.    
  53. int pin = 8;//DSM501A input D8  
  54.    
  55. float wuchaxiuzheng = 0;  
  56.    
  57. unsigned long duration;  
  58.    
  59. unsigned long starttime;  
  60.    
  61. unsigned long endtime;  
  62.    
  63. unsigned long sampletime_ms = 30000;  
  64.    
  65. unsigned long lowpulseoccupancy = 0;  
  66.    
  67. float ratio = 0;  
  68.    
  69. float concentration = 0;  
  70.    
  71. float tempconcentration=0;  
  72.    
  73. int sensorValue = 0;        // value read from the NTC  
  74.    
  75. int TEMPRATURE=0;  
  76.    
  77. int i=0;  
  78.    
  79. float R_Data=0;  
  80.    
  81. float U_data [111]={4.67,4.65,4.64,4.62,4.60,4.57,4.55,4.53,4.51,4.48,4.46,4.43,4.40,4.38,4.35,4.32,4.28,4.25,4.22,4.19,4.15,4.11,4.08,4.04,4.00,3.96,3.92,3.88,3.83,3.79,3.75,3.70,3.65,3.61,3.56,3.51,3.47,3.42,3.37,3.32,3.27,3.22,3.17,3.11,3.06,3.01,2.96,2.91,2.86,2.81,2.75,2.70,2.65,2.60,2.54,2.50,2.44,2.39,2.34,2.29,2.24,2.20,2.15,2.10,2.06,2.01,1.96,1.92,1.87,1.83,1.78,1.74,1.70,1.66,1.62,1.58,1.54,1.50,1.47,1.43,1.39,1.36,1.32,1.29,1.25,1.22,1.19,1.15,1.12,1.09,1.06,1.04,1.01,0.98,0.96,0.93,0.91,0.88,0.86,0.84,0.81,0.79,0.77,0.75,0.73,0.713,0.69,0.67,0.66,0.64,0.62};//温度对应NTC电表格  
  82.    
  83. int divider[6] = {0, 1, 8, 64, 256, 1024};//read RH use interrupt get F  
  84.    
  85. int prescaler = 5;  
  86.    
  87. double count = 0;  
  88.    
  89. double middle = 0;  
  90.    
  91. char x = 0;  
  92.    
  93. int Fout=0;  
  94.    
  95. int RH=0;  
  96.    
  97. byte du[8]={  
  98.    
  99. B00111,  
  100.    
  101. B00101,  
  102.    
  103. B00111,  
  104.    
  105. B00000,  
  106.    
  107. B00000,  
  108.    
  109. B00000,  
  110.    
  111. B00000,  
  112.    
  113. };//define 1602 char   
  114. ISR(TIMER1_OVF_vect)  
  115.    
  116. {  
  117.    
  118.     if (prescaler < 4)  
  119.    
  120.     {  
  121.    
  122.         prescaler++;  
  123.    
  124.     }  
  125.    
  126. }  
  127.    
  128. void interrupt()  
  129.    
  130. {  
  131.    
  132.     if (!x)  
  133.    
  134.     {  
  135.    
  136.         count = TCNT1;  
  137.    
  138.         TCNT1 = 0x000;  
  139.    
  140.         TCCR1B = prescaler;  
  141.    
  142.         attachInterrupt(0, interrupt, FALLING);  
  143.    
  144.     }  
  145.    
  146.     else  
  147.    
  148.     {  
  149.    
  150.         middle = TCNT1;  
  151.    
  152.         attachInterrupt(0, interrupt, RISING);  
  153.    
  154.     }  
  155.    
  156.     x = ~x;  
  157.    
  158. }  
  159.    
  160. void setup()  
  161.    
  162. {  
  163.    
  164. Wire.begin();  
  165.    
  166.   Serial.begin(9600);  
  167.    
  168. //  mySerial.begin(9600);  
  169.    
  170. //  inputString.reserve(200);  
  171.    
  172. //  MsTimer2::set(2000, timer); //定时器设置,每2秒触发一次timer函数操作  
  173.    
  174. //  MsTimer2::start();  
  175.    
  176.   //  pinMode(buttonPin, INPUT);    
  177.    
  178.   analogReference(DEFAULT);//INTERNAL  
  179.    
  180.     lcd.createChar(1,du);  
  181.    
  182.     lcd.begin(16, 2);    
  183.    
  184.     lcd.clear();  
  185.    
  186. //    lcd.setCursor(0, 0);  
  187.    
  188. //    lcd.print("PM2.5=");  
  189.    
  190. //    lcd.setCursor(0, 1);  
  191.    
  192. //    lcd.print("T=     ");  
  193.    
  194. //    //lcd.write(1);  
  195.    
  196. //    lcd.print("   RH=  %");  
  197.    
  198. //    Serial.begin(9600);  
  199.    
  200.     pinMode(buttonPin, INPUT);  
  201.    
  202.     pinMode(8,INPUT);  
  203.    
  204.     TIMSK1 = 0x01;  
  205.    
  206.     TCCR1A = 0x00;  
  207.    
  208.     attachInterrupt(0, interrupt, RISING);  
  209.    
  210.     starttime = millis();   
  211. }  
  212.    
  213. void loop()  
  214.    
  215. {  
  216.    
  217.   
  218.   duration = pulseIn(pin, LOW);  
  219.    
  220.   lowpulseoccupancy += duration;  
  221.    
  222.   endtime = millis();  
  223.    
  224.   if ((endtime-starttime) > sampletime_ms)  
  225.    
  226.   {  
  227.    
  228.     ratio = (lowpulseoccupancy-endtime+starttime + sampletime_ms)/(sampletime_ms*10.0);  // Integer percentage 0=>100  
  229.    
  230.     concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve  
  231.    
  232.     //Serial.print(lowpulseoccupancy);  
  233.    
  234.     // Serial.print(",");  
  235.    
  236.     //Serial.print(ratio);  
  237.    
  238. //    Serial.print("DSM501A:");  
  239.    
  240. //    Serial.println(concentration);  
  241.    
  242. //    Serial.print(";");  
  243.    
  244. //Serial.println(endtime-starttime);  
  245.    
  246. wuchaxiuzheng = (endtime-starttime-30000)/30000.0;  
  247.    
  248. //Serial.println(wuchaxiuzheng);  
  249.    
  250. concentration = (1.00-wuchaxiuzheng)*concentration;  
  251.    
  252. //Serial.println(concentration);  
  253.    
  254.   
  255.     lcd.setCursor(6, 0);  
  256.    
  257.     lcd.print(concentration);  
  258.    
  259.     lcd.print("pcs/0.01cf");  
  260.    
  261. //    lowpulseoccupancy = 0;  
  262.    
  263. //    starttime = millis();  
  264.    
  265.   }  
  266.    
  267.   sensorValue = analogRead(analogInPin);    // read the analog in value:   
  268.   delay(10);    
  269.    
  270.   R_Data=sensorValue*5/1024.0;  
  271.    
  272.   //Serial.print("R_Data = " );                         
  273.    
  274.   //Serial.print(R_Data);     
  275.    
  276.   for(i=0;i<111;i++){  
  277.    
  278.      if(R_Data>4.67)  
  279.    
  280.      {  
  281.    
  282.        TEMPRATURE =-30;//对应-30℃  
  283.    
  284.       }  
  285.    
  286.      else if(R_Data<0.62)  
  287.    
  288.      {  
  289.    
  290.       TEMPRATURE=80; //对应80℃        
  291.    
  292.       }  
  293.    
  294.      else if(R_Data<U_data[i]&&R_Data>U_data[i+1])  
  295.    
  296.      {  
  297.    
  298.       TEMPRATURE=int(i-30-3);   
  299.       }  
  300.    
  301. }  
  302.    
  303. //     Serial.print("T:" );  
  304.    
  305. //     Serial.print(TEMPRATURE);  
  306.    
  307. //     Serial.print(";" );  
  308.    
  309.      delay(10);  
  310.    
  311.   
  312.   
  313.     lcd.setCursor(0, 0);  
  314.    
  315.     lcd.print("PM2.5=");  
  316.    
  317.     lcd.setCursor(0, 1);  
  318.    
  319.     lcd.print("T=     ");  
  320.    
  321.     //lcd.write(1);  
  322.    
  323.     lcd.print("   RH=  %");  
  324.    
  325. //     lcd.setCursor(0, 1);  
  326.    
  327. //     lcd.print("T=     ");  
  328.    
  329. //    //lcd.write(1);  
  330.    
  331. //    lcd.print("   RH=  %");  
  332.    
  333.      lcd.setCursor(2, 1);  
  334.    
  335.      lcd.print(TEMPRATURE);  
  336.    
  337.      lcd.write(1);  
  338.    
  339.     lcd.print("C");  
  340.    
  341.      Fout=(16000000.0 / divider[prescaler] / count);    
  342.    
  343.      //Serial.print("Vsensor=" );                         
  344.    
  345.      //Serial.print(sensorValue);        
  346.    
  347.      //Serial.print(", " );   
  348.      //Serial.print("Freq=");  
  349.    
  350.      //Serial.print(Fout);  
  351.    
  352. //    Serial.print("   ");  
  353.    
  354. //    Serial.print(int(divider));  
  355.    
  356. //    Serial.print("   ");  
  357.    
  358. //    Serial.print(prescaler);  
  359.    
  360. //    Serial.print("   ");  
  361.    
  362. //    Serial.println(count);  
  363.    
  364. if (Fout<8115)  
  365.    
  366. {  
  367.    
  368. RH=100;  
  369.    
  370. //      Serial.print("RH:100");  
  371.    
  372. //      Serial.println(";");  
  373.    
  374.       lcd.setCursor(13, 1);  
  375.    
  376.       lcd.print("H.");  
  377.    
  378. }  
  379.    
  380. else if(Fout>9595)  
  381.    
  382. {  
  383.    
  384. RH=0;  
  385.    
  386.   //   Serial.print("RH:0");  
  387.    
  388. //   Serial.println(";");  
  389.    
  390.    lcd.setCursor(13, 1);  
  391.    
  392.    lcd.print("L.");  
  393.    
  394. }  
  395.    
  396. else  
  397.    
  398. {  
  399.    
  400.   
  401. RH=(9595-Fout)/14.8;  
  402.    
  403. // Serial.print("RH:");  
  404.    
  405. // Serial.print(RH);  
  406.    
  407. // Serial.println(";");  
  408.    
  409. lcd.setCursor(13, 1);  
  410.    
  411. lcd.print(RH);  
  412.    
  413. }  
  414.    
  415.     if (prescaler > 1)  
  416.    
  417.     {  
  418.    
  419.         prescaler--;  
  420.    
  421.         delay(200);  
  422.    
  423.     }  
  424.    
  425.   
  426. //if(  flag )//  
  427.    
  428. //  {  
  429.    
  430. //    Serial.print( BH1750() );  
  431.    
  432. //    Serial.println("[lux]");  
  433.    
  434. //      
  435. //    flag = 0;//归零,等着定时中断重新赋值  
  436.    
  437. //  }  
  438.    
  439. delay(2000);  
  440.    
  441.   
  442.    if(tempconcentration!=concentration)  
  443.    
  444.    {  
  445.    
  446.     tempconcentration=concentration;  
  447.    
  448.     BH=BH1750();  
  449.    
  450.     // read the state of the jiangyu value:  
  451.    
  452.   buttonState = digitalRead(buttonPin);  
  453.    
  454.     // check if the jiangyu is low.  
  455.    
  456.   // if it is, the buttonState is LOW:  
  457.    
  458.   if (buttonState == LOW) {       
  459.    
  460.     Rain=0;  
  461.    
  462.     }   
  463.   else {  
  464.    
  465.     Rain=1;  
  466.    
  467.     }  
  468.    
  469. //lewei ouput by computer tools    
  470.    
  471. //     Serial.print("D:");  
  472.    
  473. //     Serial.print(concentration);  
  474.    
  475. //     Serial.print(";");  
  476.    
  477. //     Serial.print("T:" );  
  478.    
  479. //     Serial.print(TEMPRATURE);  
  480.    
  481. //     Serial.print(";" );  
  482.    
  483. //     Serial.print("R:");  
  484.    
  485. //     Serial.print(RH);  
  486.    
  487. //     Serial.print(";" );  
  488.    
  489. //     Serial.print("B:" );  
  490.    
  491. //     Serial.print(BH);  
  492.    
  493. //     Serial.print(";" );  
  494.    
  495. //     Serial.print("W:");  
  496.    
  497. //     Serial.print(Rain);  
  498.    
  499. //     Serial.println(";");  
  500.    
  501.   
  502. //lewei ouput by GPRS     
  503.    
  504.   
  505.     lcd.setCursor(0, 1);  
  506.    
  507.     lcd.print("                ");  
  508.    
  509.     lcd.setCursor(0, 1);  
  510.    
  511.     lcd.print(BH);  
  512.    
  513.     lcd.print("LUX");  
  514.    
  515.     //delay(5000);   
  516.   
  517.     String tempstring="@uploading(01,D,";  
  518.    
  519.     String tempstring1=")";  
  520.    
  521.     Serial.print(tempstring);  
  522.    
  523.     Serial.print(int(concentration));  
  524.    
  525.     Serial.println(tempstring1);   
  526. //    delay(12000); min transtime  
  527.    
  528. delay(30000);  
  529.    
  530.   
  531.     String tempstring2="@uploading(01,T,";  
  532.    
  533.     String tempstring3=")";  
  534.    
  535.     Serial.print(tempstring2);  
  536.    
  537.     Serial.print(TEMPRATURE);  
  538.    
  539.     Serial.println(tempstring3);   
  540. //    delay(12000);  
  541.    
  542. delay(30000);  
  543.    
  544.   
  545.     String tempstring4="@uploading(01,R,";  
  546.    
  547.     String tempstring5=")";  
  548.    
  549.     Serial.print(tempstring4);  
  550.    
  551.     Serial.print(RH);  
  552.    
  553.     Serial.println(tempstring5);   
  554. //    delay(15000);  
  555.    
  556.     delay(30000);  
  557.    
  558.   
  559.     String tempstring6="@uploading(01,B,";  
  560.    
  561.     String tempstring7=")";  
  562.    
  563.     Serial.print(tempstring6);  
  564.    
  565.     Serial.print(int(BH));  
  566.    
  567.     Serial.println(tempstring7);   
  568. //    delay(2000);  
  569.    
  570. delay(30000);  
  571.    
  572.   
  573.     String tempstring8="@uploading(01,W,";  
  574.    
  575.     String tempstring9=")";  
  576.    
  577.     Serial.print(tempstring8);  
  578.    
  579.     Serial.print(Rain);  
  580.    
  581.     Serial.println(tempstring9);   
  582. delay(30000);  
  583.    
  584.   
  585.     lowpulseoccupancy = 0;  
  586.    
  587.     starttime = millis();  
  588.    
  589.   
  590.     }  
  591.    
  592.   
  593. }  
  594.    
  595.   
  596. double BH1750() //BH1750设备操作  
  597.    
  598. {  
  599.    
  600.   int i=0;  
  601.    
  602.   double  val=0;  
  603.    
  604.   //开始I2C读写操作  
  605.    
  606.   Wire.beginTransmission(BH1750address);  
  607.    
  608.   Wire.write(0x10);//1lx reolution 120ms//发送命令  
  609.    
  610.   Wire.endTransmission();    
  611.    
  612.   
  613.   delay(200);  
  614.    
  615.   //读取数据  
  616.    
  617.   Wire.beginTransmission(BH1750address);  
  618.    
  619.   Wire.requestFrom(BH1750address, 2);  
  620.    
  621.   while(Wire.available()) //  
  622.    
  623.   {  
  624.    
  625.     buff[i] = Wire.read();  // receive one byte  
  626.    
  627.     i++;  
  628.    
  629.   }  
  630.    
  631.   Wire.endTransmission();  
  632.    
  633.   if(2==i)  
  634.    
  635.   {  
  636.    
  637.    val=((buff[0]<<8)|buff[1])/1.2;  
  638.    
  639.   }  
  640.    
  641.   if(val<0) val=56134+val;  
  642.    
  643.   return val;  
  644.    
  645. }  

Arduino+SIM900A 通过http协议实现上传数据到云服务器 本文主要讲述Arduino和SIM900A通过HTTP协议将数据上传至云服务器上的相关操作,如果想了解 Zigbee和SIM900A的相关操作请看  http://blog.youkuaiyun.com/uyy203/article/details/55017571 主要使用AT命令 AT+CFUN=1 选择模式为 全功能模式 AT+SAPBR= 阅读详情

相关推荐

基于Arch Linux的嵌入式GPRS开发:从工具链搭建到STM32/Arduino实战

嵌入式开发中,GPRS通信模块是实现物联网设备联网的关键组件,其核心是通过串口发送AT指令进行控制。理解AT指令的工作原理,是掌握模块初始化、网络注册、TCP/IP数据收发等通信流程的基础。这项技术对于远程数据采集、智能农业、车辆追踪等低功耗广域网应用具有重要价值。在具体实践中,开发者常面临工具链配置复杂、调试效率低、代码稳定性差等挑战。本文以Arch Linux为开发环境,结合其强大的包管理和滚动更新特性,系统讲解了如何搭建ARM交叉编译工具链,并针对SIM800C等经典模块,在STM32和Arduino

weixin_32239523的博客 274

Arduino SIM800L HTTP 连接器:实现低功耗物联网通信的利器

Arduino SIM800L HTTP 连接器:实现低功耗物联网通信的利器 项目介绍 Arduino SIM800L HTTP 连接器 是一个专为 Arduino 设计的开源库,旨在通过 SIMCom 的 SIM800L 模块实现 HTTP 和 HTTPS 通信。SIM800L 是一款 GSM/GPRS 模块,广泛应用于物联网设备中,支持通过 AT 命令进行控制。该库不仅支持 GET 和 POS...

gitblog_01007的博客 1132

【嵌入式硬件开发基础】Arduino常用通讯模块与应用:WiFi通讯模块,GSM/GPRS通讯模块,GPS定位模块,nRF24L01通讯模块

WiFi是一种可以将个人电脑、手持设备等终端以无线方式互相连接的技术。WiFi具有无线电波覆盖范围广,速度快、靠性高、无需布线、健康安全等特点。目前已广泛应用于网络媒体、掌上设备、日常休闲、客运列车等众多领域。WiFi通讯模块也广泛应用于监控、遥控玩具、网络收音机、摄像头、数码相框、医疗仪器、数据采集、手持设备、家居智能化、仪器仪表、设备参数监测、无线POS 机、现代农业、军事等方面。

追光者♂:记录、分享、总结、提升,现象级专栏《Python从入门到人工智能》作者,无惧黑暗,坚信曙光 440

《Arduino计算机视觉编程》一第3章 用OpenCV和Arduino进行数据采集3.1 图像和视频采集...

本节书摘来自华章出版社《Arduino计算机视觉编程》一书中的第3章,第3.1节,作者[土耳其] 欧森·奥兹卡亚(zen zkaya),吉拉伊·伊利茨(Giray Yilliki),更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第3章 用OpenCV和Arduino进行数据采集 在本章中,你将了解计算机视觉系统的数据采集部分。相机和传感器的数据...

weixin_33711647的博客 4822

arduino gprs代码

arduino GPRS的代码,不过有些地方要根据所需修改

基于onenet平台的gps+gprs定位服务(arduino实现)

基于onenet平台的gps+gprs定位服务(arduino实现) 包括开发源码,文档说明

基于ARDUINO的智能家居数据采集无线控制系统设计

https://v.kuaishou.com/BUJOQM 单片机作品设计定做arduino智能采集监测报警系统设计 该作品在快手被播放过1次,点击链接,打开【快手极速版】直接观看!【ARDUINO智能家居数据采集系统 525536909-哔哩哔哩】 https://b23.tv/ozv58Gm。

fang525536909的博客 1281

DSM501A灰尘传感器.pdf

传感器灰尘传感器DSM501A 是一款韩国产的传感器。灵敏度高,体积小。

基于LoRa多传感器与arduino的GPRS远程数据传输系统设计

LoRa的有效距离4.5公里内,GPRS则没有距离限制,但是传输数据的成本较高,本课题解决多个LoRa传感器通过点名轮询的方式获得数据,然后汇总采集到的数据,通过GPRS发给公网固定IP地址的服务器接收,实现汇总多组传感器数据,集中传送,既解决了使用成本问题,又解决了多点传感器的数据采集问题。要求arduino带有软件狗,确保运行不会出问题。...

clleung的博客 3055

DSM501A DataSheet PDF

韩国SYHITECH 灰尘传感器 DSM501A DataSheet PDF

GSM&GPRS 无线通信Arduino/AT指令使用教程-电路方案

仅需一张支持GSM的电话卡,即可打电话,发短信,GPRS无线数据传输。体积小巧,方便携带;板载1500uF超大电解电容,无需外接供电,亦可保证模块在瞬时大电流下依旧能够正常使用。本项目围绕Gravity UART A6 GSM & GPRS无线通信模块分享其Arduino使用教程/AT指令使用教程。该GSM&GPRS 无线通信模块采用5V供电,串口电平2.8V,完美兼容Arduino,树莓派等5V和3.3V控制器。模块拥有一个3.5mm耳机接口,可以制作一台DIY手机。 引脚说明: 技术规格: 工作电压:5V 待机电流:<3mA 接口方式:UART (TTL) 工作温度:-30℃~+80℃ 安装孔尺寸:内径3.1mm/外径6mm GSM/GPRS频段:850/900/1800/1900 MHz 灵敏度:<-105 dBm GPRS Class 10 支持语音通话 支持SMS短信 支持GPRS数据业务,最大数据速率,下载85.6Kbps,上传42.8Kbps AT命令支持标准AT和TCP/IP命令接口 支持数字音频和模拟音频,支持HR,FR,EFR,AMR语音编码 模块尺寸:45x37 mm 安装孔位置:25x30 mm 重量:34 g 短信发送(见附件下载其代码): 语音通话 通过两个命令切换到耳机模式 AT+SNFS=0 //切换耳机模式(AT+SNFS=1 表示扬声器模式) AT+CRSL=2 //调整音量(值为0-15,15表示音量最大) 拨打和接听电话 ATD+拨打号码; //拨打指定号码 eg. ATD10086; Ring //有来电 ATA //接听来电 ATH //挂断当前通话

基于Cortex-M0与SIM800L的Arduino GPRS物联网终端开发实战

在物联网应用中,嵌入式微控制器(MCU)与蜂窝通信模块的结合是实现远程、离线设备联网的关键技术。其核心原理在于MCU通过串行通信接口(如UART)向通信模块发送标准AT指令集,以控制其完成网络注册、建立数据连接及收发信息。这种技术方案的价值在于提供了不依赖本地Wi-Fi、独立于云服务的自主可控通信能力,尤其适用于环境监测、远程状态上报等无稳定局域网或对数据隐私要求高的场景。本文聚焦于资源受限的ARM Cortex-M0平台与经典的SIM800L GPRS模块,深入探讨了在便捷的Arduino生态下,如何克服

weixin_34055787的博客 302

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

Arduino GPRS模块入门:从硬件拆解到AT指令实战与物联网应用

在物联网开发中,串口通信和AT指令是连接微控制器与无线通信模块的基础技术。其原理是通过UART接口发送文本命令控制模块,实现网络注册、数据传输等功能。这项技术的核心价值在于为嵌入式设备提供了稳定、低成本的远程通信能力,尤其适用于数据量小、覆盖要求广的物联网场景。例如,在环境监测、远程控制等项目中,开发者常使用GPRS模块作为通信桥梁。本文以经典的GPRS Shield V1.0为例,深入解析其硬件设计、电源管理要点,并通过AT指令实战演示短信收发、TCP连接等关键操作,帮助开发者快速构建可靠的物联网原型系统

weixin_30298497的博客 339

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

AD20/Altium designer——元器件批量命名与编号的高效技巧

本文详细介绍了在AD20/Altium Designer中实现元器件批量命名与编号的高效技巧。通过解析核心的“原理图标注”功能,从基础全局操作到进阶的按模块分区、利用标识符及合并BOM等智能方法,帮助硬件工程师彻底告别手动编号,大幅提升设计效率与文档规范性,并融入了一套完整的实战工作流。

whisky的博客 568

基于DTMF与GSM的远程控制系统:从原理到Arduino/ESP32实现

在嵌入式系统和物联网领域,远程控制与数据采集是核心需求。其原理通常涉及指令编码、无线传输与设备响应。DTMF(双音多频)作为一种经典的音频编码技术,因其极高的鲁棒性和对信道质量要求低的特点,在传统电话系统中被广泛用于信号传输。这项技术的价值在于,它能够通过最基础的语音通道(如GSM通话)可靠地传递控制指令,成为在恶劣网络环境下数据连接的可靠备份或“最后手段”。其应用场景包括工业监控、远程数据采集、应急通信以及偏远地区的设备控制。本文聚焦于如何将DTMF技术与现代移动通信(GSM)结合,利用Arduino或E

weixin_29168153的博客 300

Halcon那些事:Halcon缺陷检测检测印刷数字完整性

创建模板 create_shape_model模板匹配 find_shape_model。

十多年IT经验,专注机器视觉,智能制造半导体行业 764

Arduino+GPRS 的环境监控方案

设备前台界面:http://www.lewei50.com/home/gatewaystatus/361#576 本实采用的硬件,除了一个串口模块以外(约200元),其他均可以从taobo上面找到标准产品 发帖子不是为了买模块,如果不愿意用gprs的可以用w5100(以太网)替代,见帖子http://www.lewei50.com/dev/doc/94 比较有意思...

weixin_30394333的博客 153

流体动力学仿真软件:Star-CCM+_(15).用户自定义函数与模型

用户自定义函数(User-Defined Functions, UDFs)允许用户编写自己的函数,并在仿真中调用这些函数。UDFs可以用于定义复杂的边界条件、源项、材料属性等。Star-CCM+支持多种编程语言,包括C++、Fortran和Java等,其中最常用的语言是Java。用户自定义模型(User-Defined Models, UDMs)允许用户在仿真中引入自定义的物理模型。这些模型可以用于描述流体行为、化学反应、多相流等复杂现象。Star-CCM+提供了丰富的API来支持UDMs的开发。

kkchenjj的博客 553

深入剖析 YOLOv11 中的 C2PSA 注意力机制

YOLOv11中的C2PSA注意力机制在目标检测领域取得突破性进展。该机制通过跨通道分组交互和轻量级位置编码,在仅增加0.6%计算量的情况下提升mAP 1.5-2.3个百分点。C2PSA创新性地结合局部跨通道交互、位置编码和双分支并行调制,采用纯卷积实现自注意力,避免传统注意力机制的高计算复杂度。实验表明,C2PSA在COCO数据集上以微小计算代价显著提升检测性能,特别是对小目标和遮挡目标效果突出。该模块可直接嵌入YOLO架构,为轻量级目标检测提供新的优化方向。

shrgegrb的博客 3397

基于SIM800的GSM/GPRS物联网开发:从AT指令到远程数据传输实战

在物联网开发中,串口通信是微控制器与外围模块交互的基础方式,通过发送特定的文本指令集(如AT指令)可以实现对无线通信模块的精确控制。其技术价值在于为嵌入式设备提供了稳定、低成本的广域移动网络接入能力,尤其适用于对实时性要求不高但覆盖范围要求广的应用场景。在农业监测、资产追踪等野外或移动环境中,传统的Wi-Fi网络覆盖有限,而基于2G网络的GSM/GPRS模块凭借其广泛的信号覆盖和较低的功耗与成本,成为可靠的数据传输解决方案。本文以SIM800模块和Arduino平台为例,深入解析了硬件连接、供电设计、AT指

weixin_34268843的博客 303

YOLOv12改进入门篇 | 手把手讲解改进模块如何实现高效涨点,以SimAM注意力模块为例

本文记录的是。SimAM注意力模块通过优化能量函数来获得每个神经元的三维权重,而或增加计算复杂度。若是有轻量化需求的小伙伴,无参的注意力模块也许是一个不错的选择。

Limiiiing的博客 2906

基于MQTT与Arduino的野外风速监测系统:从硬件选型到远程部署

物联网(IoT)系统通过传感器、微控制器和网络协议,实现对物理世界的远程感知与控制。其核心原理在于将终端设备采集的数据,经由轻量级通信协议传输至云端或本地服务器,供用户实时查看与分析。MQTT协议因其低功耗、低带宽和发布/订阅模式,成为野外、移动等不稳定网络环境下物联网通信的理想选择,尤其适用于环境监测、远程控制等场景。本文聚焦于一个典型的物联网应用实例——野外风速监测系统,详细阐述了如何利用Arduino平台和MQTT协议,构建一个包含数据采集端(Maduino A9G)与展示控制端(ESP32)的完整解

weixin_30764771的博客 427

YOLOv8科研探索:HAttention激活更多特征点,真心助你提升细粒度检测精度

如果你在集成中遇到问题,不妨从特征点激活阈值、多尺度融合的逻辑入手,一点点打磨——科研的突破,往往就藏在这些细致的尝试里。想象一下,普通模型可能只关注目标的“大块区域”,而HAttention能让模型同时捕捉到目标的“边缘”“纹理”等细粒度特征点,就像给模型装上了“显微镜”,再小的细节也逃不过它的“眼睛”。比如,小目标的细粒度特征点(如昆虫的触角)和大目标的整体特征点(如昆虫的身体)会被同时考虑,通过注意力权重的分配,让小细节融入全局理解,避免模型“只见树木不见森林”。HAttention通过。

FJN110的博客 79

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

基于Arduino和Labview的微型气象监测系统设计(支持资料参考_相关定制)

本文通过分析研究探讨了自动化无线气象站的概念,涉及虚拟设备、LabView虚拟设备开发环境和虚拟设备系统,重点介绍了MSP430F437和GPRS(通用分组无线电服务)单片机的数据传输技术,数据提取(DAQ),采用LabView翻译语言,结合程序方法,建立了LabView气象监测系统.分析GPRS网络程序,根据空间属性选择相应的网络电路,了解气象数据传输情况。请注意,虚拟技术的好处在于它非常适合于虚拟设备的技术,而且很容易使用虚拟设备来开发传统的气象监测系统,如果它被用于设计自动气象监测系统的话。

d1_189的博客 940

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: qt入门 layout布局
下一篇: window下配置Python+ Django + Eclipse环境
Watson2016
博客等级 码龄11年 342粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值