Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: ykyk9898
打印 上一主題 下一主題

如何增加內存或改寫程式

[複製鏈接]
跳轉到指定樓層
1#
發表於 2019-2-27 15:27:43 | 顯示全部樓層 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 ykyk9898 於 2019-2-27 15:31 編輯

這是將原本記憶卡裡面圖片藉由esp8266上傳到網頁的功能,不過在上傳時由於內存不夠而導致失敗,

不知道有哪位高手知道如何減少不必要的東西或改寫寫法,而讓上傳成功

#include <SoftwareSerial.h>
#include <SD.h>
#define SD_CS 10
SoftwareSerial esp(4, 5);                   //RX,TX


String ssid = "tim";                           //wifi name  
String password = "1122334455";                       //wifi password
String server = "120.114.132.69";                         // server name

void connectWifi()                           //wificonnection
{
  String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
  esp.println(cmd);
  delay(4000);
  
  if(esp.find("OK")){
    Serial.println("WIFI Connected!");
    delay(1000);
  }
  else {  
  Serial.println("Cannot connect to wifi");
  connectWifi();
  }
}
void wifisetup()
{
  esp.println("AT");
  esp.println("AT+CWMODE=3");
  Serial.println("Wifi ready");
}


void setup()
{
  Serial.begin(9600);
  esp.begin(9600);
  pinMode(10, OUTPUT);
  Serial.println("Wifi Setup");
  wifisetup();                         //wifi setup
  connectWifi();
  Serial.print("Initializing SD card...");
  if (!SD.begin(SD_CS)) {
    Serial.println("failed!");
    return;
  }
    Serial.println("OK!");
  test();
}


void loop() {

  

}


void test(){
  File webFile;
  char fileName[13] = "555.JPG";
  String cmd = "AT+CIPSTART=\"TCP\",\"" + server + "\",80";
  esp.println(cmd);
  delay(3000);

  if(esp.find("OK"))
  {
    Serial.println("server found");
    webFile = SD.open(fileName,FILE_READ);
    String post = "POST /skin/upok.php HTTP/1.1\r\n";      
    post+= "Host: 120.114.132.69\r\nContent-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW\r\n";
    post+="Content-Length:";
    post+=webFile.size()+196;
    post+="\r\n";
    post+="----WebKitFormBoundary7MA4YWxkTrZu0gW";
    post+="Content-Disposition: form-data; name=\"my_file\"; filename=\"555.JPG\"\r\n";
    post+="Content-Type: image/jpge\r\n";
    post+="----WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n";
    delay(1000);
    Serial.print(post);
    String sendData = "AT+CIPSEND="+String(post.length());
    Serial.print(sendData);
    esp.print(sendData);
    delay(6000);
    if (esp.find(">"))
    {
      Serial.println(F("SENDING  data"));
    }
    else
    {
       Serial.println(F("NOT SENDING"));
       esp.println("AT+CIPCLOSE");
    }
  }
  else
  {
    Serial.println(F("server not found"));
  }
  delay(10000);
}
2#
 樓主| 發表於 2019-3-4 21:50:01 | 顯示全部樓層
超新手 發表於 2019-2-27 20:18
看不懂?
"上傳時由於內存不夠而導致失敗?"
這個錯誤訊息是誰顯示的?

目前接上去會變成這樣

messageImage_1551279400254.jpg (174.78 KB, 下載次數: 306)

目前接上去會變成這樣

目前接上去會變成這樣
3#
 樓主| 發表於 2019-3-6 00:23:26 | 顯示全部樓層
超新手 發表於 2019-3-5 09:25
它只是警告而己, 實際上有發生問題嗎?
如果擔心出問題, 可以先把所有有用雙引號的 Serial.println 或 Seria ...

謝謝你的建議,我把有雙引號的都有改掉了,wifi連上之後,圖片的部分還是不能上傳的樣子

456.jpg (261.1 KB, 下載次數: 309)

目前wifi能連上但圖片上傳還是失敗了

目前wifi能連上但圖片上傳還是失敗了
4#
 樓主| 發表於 2019-3-6 15:40:54 | 顯示全部樓層
超新手 發表於 2019-3-6 08:46
你確定你貼的程式和執行的程式是同一個嗎?
印出來的資料不一樣. 不像是同一個程式執行的結果 ...

是同一個程式沒錯,因為不太會寫這個所以很多資料是自己上網看跟嘗試的,可能是程式寫得有問題但不太會改,不知是否可以有聯絡方式方便詢問你
5#
 樓主| 發表於 2019-3-7 18:19:52 | 顯示全部樓層
本帖最後由 ykyk9898 於 2019-3-7 18:23 編輯
超新手 發表於 2019-3-6 17:48
仔細看了一下, 這個程式問題很多
不過先把
esp.print(sendData);


請問要如何改寫才能將圖片順利上傳到伺服器呢...我是用postman伺服器,你講的地方我有改了但還是無法..如果換了mega板子會比較好做嗎

未命名.jpg (182.22 KB, 下載次數: 238)

未命名.jpg
6#
 樓主| 發表於 2019-3-7 19:32:06 | 顯示全部樓層
本帖最後由 ykyk9898 於 2019-3-7 19:33 編輯
超新手 發表於 2019-3-7 19:08
可以把程式再貼一次嗎?


#include <SoftwareSerial.h>
#include <SD.h>
#define SD_CS 10
SoftwareSerial esp(4, 5);                   //RX,TX


String ssid = "Ksu-fish";                           //wifi name  
String password = "88888866";                       //wifi password
String server = "120.114.132.69";                         // server name

void connectWifi()                           //wificonnection
{
  String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
  esp.println(cmd);
  delay(4000);
  
  if(esp.find("OK")){
    Serial.println(F("WIFI Connected!"));
    delay(1000);
  }
  else {  
  Serial.println(F("Cannot connect to wifi"));
  connectWifi();
  }
}
void wifisetup()
{
  esp.println(F("AT"));
  esp.println(F("AT+CWMODE=3"));
  Serial.println(F("Wifi ready"));
}


void setup()
{
  Serial.begin(9600);
  esp.begin(9600);
  pinMode(10, OUTPUT);
  Serial.println(F("Wifi Setup"));
  wifisetup();                         //wifi setup
  connectWifi();
  Serial.print(F("Initializing SD card..."));
  if (!SD.begin(SD_CS)) {
    Serial.println(F("failed!"));
    return;
  }
    Serial.println(F("OK!"));
  test();
}


void loop() {

  

}


void test(){
  File webFile;
  char fileName[13] = "555.JPG";
  String cmd = "AT+CIPSTART=\"TCP\",\"" + server + "\",80";
  esp.println(cmd);
  delay(3000);

  if(esp.find("OK"))
  {
    Serial.println(F("server found"));
    webFile = SD.open(fileName,FILE_READ);
    Serial.print(webFile);
    String post = "POST /skin/upok.php HTTP/1.1\r\n";      
    post += "Host: 120.114.132.69\r\nContent-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW\r\n";
    post += "Content-Length:";
    post += webFile.size()+196;
    post += "\r\n";
    post += "----WebKitFormBoundary7MA4YWxkTrZu0gW";
    post += "Content-Disposition: form-data; name=\"my_file\"; filename=\"555.JPG\"\r\n";
    post += "Content-Type: image/jpeg\r\n";
    post += "----WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n";
    delay(1000);
    Serial.print(post);
    String sendData = "AT+CIPSEND="+String(post.length());
    Serial.print(sendData);
    esp.println(sendData);*/
    delay(6000);
    if (esp.find(">"))
    {
      Serial.println(F("SENDING  data"));
    }
    else
    {
       Serial.println(F("NOT SENDING"));
       esp.println(F("AT+CIPCLOSE"));
    }
  }
  else
  {
    Serial.println(F("server not found"));
  }
  delay(10000);
}


是否是post 那邊寫法的問題所以才一直無法成功上傳或是其他原因
7#
 樓主| 發表於 2019-3-7 21:12:54 | 顯示全部樓層
超新手 發表於 2019-3-7 20:59
對, 你看你貼的這個程式, 多了一個 */
esp.println(sendData);*/
根本沒辦法成功 COMPILER


雖然拿掉可以連上了..但是還是一樣圖片上傳失敗

222.png (207.58 KB, 下載次數: 243)

222.png
8#
 樓主| 發表於 2019-3-11 15:27:25 | 顯示全部樓層
超新手 發表於 2019-3-8 09:23
應該是 RAM 用量太多, 影響到程式執行
把 test 改成這樣試試看
也就是把 post 的值也移到 ROM

還是無法上傳,不知道是不是post那整段的問題,查了好多資料,可能要改改寫法
9#
 樓主| 發表於 2019-3-11 19:42:05 | 顯示全部樓層
超新手 發表於 2019-3-11 16:05
可以把結果貼出來嗎?

不好意思,結果都和上次一樣,到最後都是not sending,因為我也沒改到甚麼,就是把你說的能用F的地方用了,其他地方都沒動到,不知道還有甚麼方法可以上傳圖片到伺服器

666.png (207.58 KB, 下載次數: 258)

666.png
10#
 樓主| 發表於 2019-3-11 20:20:49 | 顯示全部樓層
超新手 發表於 2019-3-11 19:52
要把 post 部份也加上 f("  ")

有加了,雖然還是不行,請問是寫法不對嗎

#include <SoftwareSerial.h>
#include <SD.h>
#define SD_CS 10
SoftwareSerial esp(4, 5);                   //RX,TX


String ssid = "6641k-16-14";                           //wifi name  
String password = "062643462";                       //wifi password
String server = "120.114.132.69";                         // server name

void connectWifi()                           //wificonnection
{
  String cmd = "AT+CWJAP=\"" +ssid+"\",\"" + password + "\"";
  esp.println(cmd);
  delay(4000);
  
  if(esp.find("OK")){
    Serial.println(F("WIFI Connected!"));
    delay(1000);
  }
  else {  
  Serial.println(F("Cannot connect to wifi"));
  connectWifi();
  }
}
void wifisetup()
{
  esp.println(F("AT"));
  esp.println(F("AT+CWMODE=3"));
  Serial.println(F("Wifi ready"));
}


void setup()
{
  Serial.begin(9600);
  esp.begin(9600);
  pinMode(10, OUTPUT);
  Serial.println(F("Wifi Setup"));
  wifisetup();                         //wifi setup
  connectWifi();
  Serial.print(F("Initializing SD card..."));
  if (!SD.begin(SD_CS)) {
    Serial.println(F("failed!"));
    return;
  }
    Serial.println(F("OK!"));
  test();
}


void loop() {

  

}


void test(){
  File webFile;
  char fileName[13] = "555.JPG";
  String cmd = "AT+CIPSTART=\"TCP\",\"" + server + "\",80";
  esp.println(cmd);
  delay(3000);

  if(esp.find("OK"))
  {
    Serial.println(F("server found"));
    webFile = SD.open(fileName,FILE_READ);
    Serial.print(webFile);   
    String post = F("POST /skin/upok.php HTTP/1.1\r\n");      
    post += F("Host: 120.114.132.69\r\nContent-Type: multipart/form-data; boundary=WebKitFormBoundary7MA4YWxkTrZu0gW\r\n");
    post += F("Content-Length:");
    post += webFile.size()+196;
    post += F( "\r\n");
    post += F("----WebKitFormBoundary7MA4YWxkTrZu0gW");
    post += F("Content-Disposition: form-data");
    post += F("name=\"my_file\"; filename=\"555.JPG\"\r\n");
    post += F("Content-Type: image/jpeg\r\n");
    post += F("----WebKitFormBoundary7MA4YWxkTrZu0gW--\r\n");
    delay(1000);
    Serial.print(post);
    String sendData = "AT+CIPSEND=" + String(post.length());
    Serial.println(sendData);
    esp.println(sendData);
    delay(6000);
    if (esp.find(">"))
    {
      Serial.println(F("SENDING  data"));
    }
    else
    {
       Serial.println(F("NOT SENDING"));
       esp.println(F("AT+CIPCLOSE"));
    }
  }
  else
  {
    Serial.println(F("server not found"));
  }
  delay(10000);
}

999.png (219.93 KB, 下載次數: 246)

999.png
11#
 樓主| 發表於 2019-3-12 18:50:32 | 顯示全部樓層
超新手 發表於 2019-3-11 20:52
前面的程式並沒有修改,為什麼果變成 server not found?程式多執行幾次看看

稍微改了一下程式碼,窗口顯示sending data,但是去伺服器看,卻沒看到圖片傳上去,請問是甚麼原因呢

111.png (207.85 KB, 下載次數: 158)

111.png
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-5-4 04:45 , Processed in 0.171348 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表