分享
三行代码  ›  专栏  ›  技术社区  ›  Adam BEN KAHLA

没有计算机,Arduino代码什么也做不了。 - Arduino code doesn't do anything without computer

  •  0
  • Adam BEN KAHLA  · 技术社区  · 2 月前

    从最近几周开始,我一直在做一个项目,涉及使用GPRS模块与数据库通信。

    当Arduino连接到计算机上时,测试进行得很好,但是当我断开连接,用适配器把它插到墙上时,它什么也没做(网站上没有数据接收)。

         #include <SoftwareSerial.h>
         #include <Wire.h>
         #include <ds3231.h>
    
         struct ts t;
    
         SoftwareSerial mySerial(7, 8); //Tx & Rx sont connectés aux broches Arduino #7 et #8
    
         void setup()
         {
         Wire.begin();
         DS3231_init(DS3231_INTCN);
         //Commence la communication Serie
         Serial.begin(9600);
         //Commence la communication Serie Arduino-Shield GPRS
          mySerial.begin(9600);
          Serial.println("Initialisation..."); 
          delay(1000);
    
         mySerial.println("AT"); //Handshaking
         updateSerial();
         mySerial.println("AT+UPSDA=2,0"); //Reset connexion
         updateSerial();
         delay(2000);
         mySerial.println("AT+UPSD=2,1,\"sl2sfr\""); //Establissement de connexion avec l'APN
         updateSerial();
         delay(2000);
         mySerial.println("AT+UPSDA=2,3"); 
         updateSerial();
         delay(2000);
         mySerial.println("AT+UPSND=2,0");
         updateSerial();
         delay(2000);
            }
    
          void loop()
         {
            DS3231_get(&t);
            String heure = String(t.hour);
            heure += ":";
            heure += String(t.min);
            heure += ":";
            heure += String(t.sec);
          String Date = String(t.year);
           Date += "-";
           Date += String(t.mon);
           Date += "-";
           Date += String(t.mday);
    
           String Equipement = "STAINS";
           String Direction = "SUD-EST";
           mySerial.println("AT+UHTTP=0");
            updateSerial();
            delay(2000);
            mySerial.println("AT+UHTTP=2,1,\"www.projetwmr.site\""); // Parametrage URL d'acces
            updateSerial();              
            delay(2000);
           String command = "AT+UHTTPC=2,5,\"/add.php\",\"post.ffs\",\"vite="; // Commande d'envoi des donnes via POST sur PHP
            float Windspeed = 80; // Recuperation des données ANALOGIQUES
            // convertion valeurs en String - Chaîne de caractères
            command += String(Windspeed);
            // or convertion précise
            // command += String(Windspeed, 2);
            command += "&equipement=";
            command += String(Equipement);
            command += "&time=";
            command += String(heure);
            command += "&date=";
            command += String(Date);
            command += "&dire=";
            command += String(Direction);
            command += "\",0"; //Fin de la commande PHP POST
            mySerial.println(command);
            updateSerial();
            delay(1000);
            delay(10000);
    
        }
    
        void updateSerial()
         {
          delay(500);
          while (Serial.available()) 
          {
            mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
          }
          while(mySerial.available()) 
          {
            Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
          }
         }
    
    0 回复  |  直到 2 月前
        1
  •  0
  •   M. R.    2 月前

    实际上,我不太清楚您在使用您的GPRS模块做什么,而且我还发现您的代码存在一些问题,例如 updateSerial 您正在检查两次串行可用性。

    不管怎样,断开Arduino与PC的连接并不会改变任何事情,除非你在使用无法使用的串行数据。因此,您的代码运行,但如果与PC断开连接,则无法正常工作。这是因为您使用的是默认的Arduino硬件串行,它应该与外部设备(如PC)通信。在你的 更新序列号 功能,您正在检查序列可用性 while (Serial.available()) 当你断开序列号时,这会变成 false 也许它能解释 “不工作” .