質問編集履歴
3
写真追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -230,6 +230,8 @@
|
|
230
230
|
|
231
231
|
```
|
232
232
|
###補足情報
|
233
|
+
|
234
|
+

|
233
235
|
構成:
|
234
236
|
Arduino mega2560
|
235
237
|
3gim・3gシールド
|
2
問題の明確化
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
JPEG画像にノイズが入る原因
|
body
CHANGED
@@ -1,40 +1,20 @@
|
|
1
1
|
###前提・実現したいこと
|
2
|
-
Arduinoで3G回線を使いカメラで撮影した画像データ[JPG]をSDカードに保存し、
|
2
|
+
Arduinoで3G回線を使いカメラで撮影した画像データ[JPG]をSDカードに保存し、一定間隔でサーバーにアップロードする監視カメラを作っています。データをバイナリから文字変換し、サーバーにpostする時にノイズが入ってしまいます。
|
3
|
-
一定間隔でサーバーにアップロードするシステムを作っています。
|
4
|
-
データをバイナリから文字変換し、サーバーにpostする時に
|
5
|
-
|
3
|
+
この状態では監視カメラとして問題があるので、ノイズ発生の原因、また解決方法などご教授頂ければと思います。
|
6
4
|
|
7
5
|
|
8
|
-
###発生している問題・エラーメッセージ
|
9
6
|
|
10
|
-
```
|
11
|
-

|
12
7
|
|
13
|
-
・1ループ目は正常にデータをpostできるが、2ループ目から正常にpostできなくなり、
|
14
|
-
データが壊れてしまう
|
15
8
|
|
16
|
-
・
|
9
|
+
###発生している問題・エラーメッセージ
|
17
10
|
|
18
|
-
//画像サイズ選択(640x480, 320x240 or 160x120)
|
19
|
-
//cam.setImageSize(VC0706_640x480); // biggest
|
20
|
-
//cam.setImageSize(VC0706_320x240); // medium
|
21
|
-
cam.setImageSize(VC0706_160x120); // small
|
22
11
|
|
23
|
-
|
12
|
+

|
24
13
|
|
25
|
-
uint8_t imgsize = cam.getImageSize();
|
26
|
-
Serial.print("Image size: ");
|
27
|
-
///////////この部分/////////////
|
28
|
-
if (imgsize == VC0706_640x480) Serial.println("640x480");
|
29
|
-
if (imgsize == VC0706_320x240) Serial.println("320x240");
|
30
|
-
if (imgsize == VC0706_160x120) Serial.println("160x120");
|
31
|
-
```
|
32
14
|
|
33
15
|
###全体のソースコード
|
34
16
|
```ここに言語を入力
|
35
|
-
|
17
|
+
|
36
|
-
* Arduino UNO + TTL Camera + SD Storage w/SPI Interface
|
37
|
-
*/
|
38
18
|
#include <Adafruit_VC0706.h>
|
39
19
|
#include <SoftwareSerial.h>
|
40
20
|
#include <SD.h>
|
@@ -44,13 +24,13 @@
|
|
44
24
|
#define chipSelect 53
|
45
25
|
|
46
26
|
//送信データ格納
|
47
|
-
#define BODY_BUFFER
|
27
|
+
#define BODY_BUFFER 965
|
48
|
-
char body[BODY_BUFFER];
|
28
|
+
char body[BODY_BUFFER]; // バッファ
|
49
29
|
#define IMGEQ "img="
|
50
30
|
|
51
31
|
// POST send parameter
|
52
|
-
const char *server = "******
|
32
|
+
const char *server = "******.bitter.jp"; // サーバ名
|
53
|
-
const char *path = "******
|
33
|
+
const char *path = "******.php"; // PHPファイル
|
54
34
|
|
55
35
|
// 送信書式
|
56
36
|
const char *header = "Content-Type: application/x-www-form-urlencoded";
|
@@ -58,6 +38,7 @@
|
|
58
38
|
|
59
39
|
int IS=strlen(IMGEQ);
|
60
40
|
char res[100];
|
41
|
+
const int powerPin = 0; //ここ重要 3gim power pinIf not using power control, 0 is set.
|
61
42
|
|
62
43
|
// CAMERA TX => 69
|
63
44
|
// CAMERA RX => 3
|
@@ -68,19 +49,21 @@
|
|
68
49
|
char fname[13];
|
69
50
|
|
70
51
|
void setup(){
|
71
|
-
Serial.begin(9600);
|
52
|
+
Serial.begin(9600);//シリアル通信設定
|
72
53
|
|
73
54
|
Serial.println("//monitoring program start//");
|
55
|
+
|
74
|
-
|
56
|
+
//SD初期化
|
75
|
-
pinMode(
|
57
|
+
pinMode(chipSelect,OUTPUT); delay(10);
|
76
58
|
//SD.begin();
|
77
|
-
if(!SD.begin()){
|
59
|
+
if(!SD.begin(chipSelect)){
|
78
60
|
Serial.println("SD card initialization failed!");
|
79
61
|
while(1){
|
80
62
|
;
|
81
63
|
}
|
82
64
|
}
|
65
|
+
|
83
|
-
|
66
|
+
//カメラ初期化
|
84
67
|
if( cam.begin() ){
|
85
68
|
camera_found = true;
|
86
69
|
Serial.println("Camera Found");
|
@@ -91,16 +74,17 @@
|
|
91
74
|
}
|
92
75
|
}
|
93
76
|
|
77
|
+
//メイン処理
|
94
78
|
void loop() {
|
95
79
|
|
80
|
+
//a3gs.setLED(true);
|
81
|
+
|
96
82
|
//画像サイズ選択(640x480, 320x240 or 160x120)
|
97
83
|
//cam.setImageSize(VC0706_640x480); // biggest
|
84
|
+
cam.setImageSize(VC0706_320x240); // medium
|
98
|
-
//cam.setImageSize(
|
85
|
+
//cam.setImageSize(VC0706_160x120); // small
|
99
|
-
|
86
|
+
|
100
|
-
|
101
|
-
delay(100);
|
102
|
-
|
103
|
-
|
87
|
+
uint8_t imgsize = cam.getImageSize();
|
104
88
|
Serial.print("Image size: ");
|
105
89
|
if (imgsize == VC0706_640x480) Serial.println("640x480");
|
106
90
|
if (imgsize == VC0706_320x240) Serial.println("320x240");
|
@@ -108,21 +92,20 @@
|
|
108
92
|
|
109
93
|
Serial.println("Snap in 3 secs...");
|
110
94
|
delay(3000);
|
111
|
-
|
95
|
+
|
112
|
-
//撮影
|
96
|
+
//撮影処理部分
|
113
97
|
if( cam.takePicture() ){
|
114
98
|
set_filename();
|
115
99
|
Serial.println("Picture taken!");
|
116
|
-
File fp = SD.open( fname, FILE_WRITE | O_TRUNC );
|
100
|
+
File fp = SD.open( fname, FILE_WRITE | O_TRUNC );
|
117
|
-
|
118
|
-
|
101
|
+
|
119
102
|
if( fp ){
|
120
103
|
uint16_t leng = cam.frameLength();
|
121
104
|
Serial.print("Storing ");
|
122
105
|
Serial.print(leng, DEC);
|
123
106
|
Serial.print(" byte image.");
|
107
|
+
|
124
108
|
pinMode(8, OUTPUT);
|
125
|
-
|
126
109
|
byte wCount = 0; // For counting # of writes
|
127
110
|
|
128
111
|
while (leng > 0) {
|
@@ -152,32 +135,36 @@
|
|
152
135
|
}
|
153
136
|
Serial.println("connected!");
|
154
137
|
|
155
|
-
//------------ SDメモリー読込み
|
138
|
+
//------------ SDメモリー読込み3GSA書出し --------------
|
156
139
|
File fp = SD.open( fname ,FILE_READ );
|
157
140
|
int len = sizeof(res);
|
158
141
|
int i=strlen(IMGEQ);
|
159
142
|
sprintf(body,"%s",IMGEQ);//POST引き渡し変数名設定
|
160
143
|
uint8_t b;
|
161
|
-
delay(3000);
|
144
|
+
//delay(3000);
|
162
145
|
|
163
146
|
Serial.print("\nhttpPOST..");
|
164
147
|
|
148
|
+
delay(50);
|
149
|
+
|
165
150
|
while(fp.available()) {//------------読み取り可能なbyteがある場合入る --------------
|
166
151
|
b = fp.read();
|
167
152
|
body[i++] = b/16 + (b/16>9?'A'-10:'0'); // バイナリ―から文字変換(上位)
|
168
153
|
body[i++] = b%16 + (b%16>9?'A'-10:'0'); // バイナリ―から文字変換(下位)
|
169
154
|
|
155
|
+
delay(50);
|
156
|
+
|
170
157
|
if( i>=BODY_BUFFER ) {
|
171
158
|
if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
|
172
|
-
//
|
159
|
+
//Serial.println("httpPOST error1...");
|
173
|
-
delay(
|
160
|
+
delay(200);
|
174
161
|
}else{
|
175
162
|
Serial.print(".");
|
176
163
|
}
|
177
164
|
i=strlen(IMGEQ);
|
178
165
|
sprintf(body,"%s",IMGEQ); //POST引き渡し変数名設定
|
179
166
|
}
|
180
|
-
delay(50);
|
167
|
+
//delay(50);
|
181
168
|
}
|
182
169
|
fp.close();
|
183
170
|
|
@@ -185,9 +172,9 @@
|
|
185
172
|
body[IS +i] = 0x00 ; // 残りバッファの3GSA書出し
|
186
173
|
if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
|
187
174
|
//Serial.println("httpPOST error2...");
|
188
|
-
delay(
|
175
|
+
delay(200);
|
189
176
|
}else{
|
190
|
-
Serial.print("
|
177
|
+
Serial.print("!");
|
191
178
|
}
|
192
179
|
}
|
193
180
|
|
@@ -198,10 +185,7 @@
|
|
198
185
|
}else {
|
199
186
|
Serial.print(" Completed send '"); Serial.println(fname);
|
200
187
|
}
|
201
|
-
|
202
|
-
cam.reset();
|
188
|
+
cam.reset();
|
203
|
-
|
204
|
-
if (SD.exists(fname)) SD.remove(fname);//SDクリア
|
205
189
|
|
206
190
|
time = millis() - time;
|
207
191
|
|
@@ -211,33 +195,40 @@
|
|
211
195
|
Serial.println("3G Shutdown..");
|
212
196
|
a3gs.end();
|
213
197
|
a3gs.shutdown();
|
198
|
+
//a3gs.setLED(false);
|
199
|
+
|
214
200
|
Serial.println("----------------------------------");
|
215
|
-
delay(
|
201
|
+
delay(25000);
|
216
202
|
}
|
217
203
|
void set_filename(){
|
218
204
|
sprintf(fname, "IMG%02d.JPG", file_count++);
|
219
205
|
|
220
206
|
if( file_count > 10){
|
221
|
-
file_count = 1; //
|
207
|
+
file_count = 1; // Overwrite
|
208
|
+
}
|
222
209
|
}
|
223
210
|
|
224
211
|
|
225
212
|
|
213
|
+
|
226
214
|
```
|
227
215
|
|
228
|
-
###
|
216
|
+
###原因と思われる部分
|
217
|
+
```
|
229
|
-
|
218
|
+
body[i++] = b/16 + (b/16>9?'A'-10:'0'); // バイナリ―から文字変換(上位)
|
230
|
-
|
219
|
+
body[i++] = b%16 + (b%16>9?'A'-10:'0'); // バイナリ―から文字変換(下位)
|
231
220
|
|
232
|
-
|
221
|
+
delay(50);
|
233
222
|
|
223
|
+
if( i>=BODY_BUFFER ) {
|
234
|
-
|
224
|
+
if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
|
225
|
+
//Serial.println("httpPOST error1...");SDとの通信が上手くできていない?
|
226
|
+
delay(200);
|
227
|
+
}else{
|
228
|
+
Serial.print(".");
|
229
|
+
}
|
235
230
|
|
236
|
-
|
231
|
+
```
|
237
|
-
|
238
|
-
・SD内に複数のデータがあると、postする時に目的のファイルを検知できないのかと思い、1ループ目で写真撮影→SD保存→撮影した写真を消去→2ループ目という流れにしました。
|
239
|
-
|
240
|
-
|
241
232
|
###補足情報
|
242
233
|
構成:
|
243
234
|
Arduino mega2560
|
1
機器構成部TTLシリアルカメラ追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
###発生している問題・エラーメッセージ
|
9
9
|
|
10
10
|
```
|
11
|
-

|
12
12
|
|
13
13
|
・1ループ目は正常にデータをpostできるが、2ループ目から正常にpostできなくなり、
|
14
14
|
データが壊れてしまう
|
@@ -244,4 +244,5 @@
|
|
244
244
|
3gim・3gシールド
|
245
245
|
SDカードスロット
|
246
246
|
simカード soracom air
|
247
|
-
SDカード
|
247
|
+
SDカード
|
248
|
+
TTLシリアルカメラ
|