質問編集履歴

3

書式の改善

2021/02/22 09:24

投稿

sk009
sk009

スコア0

test CHANGED
File without changes
test CHANGED
@@ -20,12 +20,10 @@
20
20
 
21
21
 
22
22
 
23
- ### 該当のソースコード
23
+ ### PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
24
24
 
25
25
  ```
26
26
 
27
- PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
28
-
29
27
  #include <winsock2.h>
30
28
 
31
29
  #include <windows.h>
@@ -216,11 +214,11 @@
216
214
 
217
215
  }
218
216
 
219
-
220
-
221
- ------------------------------------------------------------------------------------------
217
+ ```
222
-
218
+
223
- RaspberryPi側のソースコード(言語:Python)
219
+ ### RaspberryPi側のソースコード(言語:Python)
220
+
221
+ ```
224
222
 
225
223
  #ソケット通信プログラム
226
224
 

2

書式の改善

2021/02/22 09:24

投稿

sk009
sk009

スコア0

test CHANGED
File without changes
test CHANGED
@@ -4,23 +4,37 @@
4
4
 
5
5
  現在,私はPC-RaspberryPi間におけるソケット通信プログラムを作成しております。作成したプログラムは,PCからRaspberryPiに数値情報を送り,RaspberryPi側で受け取った数値をグラフにリアルタイムで表示するというものです。
6
6
 
7
- ソースコード以下に示します。
7
+ ソースコード以下のようなっています。
8
+
9
+
10
+
8
-
11
+ しかし,このプログラムではRaspberryPi側は数値情報を1回しか受信できないため,グラフを途中で変化させることができません(図1のようにyの値が一定のグラフしか出力できない)。このプログラムを複数回の送受信ができるように改良し,グラフをリアルタイムで変化させるにはどうすれば良いでしょうか?(図2のようにyの値を変化させたい)
12
+
13
+
14
+
9
-
15
+ 説明が下手で申し訳ありません。よろしくお願いいたします。(現在のプログラムでは1回しか送受信ができないため,図1のようなグラフしか出力できません。これをリアルタイムで複数回の送受信ができるようにし,図2のようなグラフを作成したいです。)
16
+
17
+
18
+
10
-
19
+ ![イメージ説明](0906bbc62b2bb82ef1c4b0b28260dc3c.png)
20
+
21
+
22
+
11
- ①PC側のソースコード
23
+ ### 該当のソースコード
24
+
12
-
25
+ ```
26
+
13
-
27
+ PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
14
-
28
+
15
- include <winsock2.h>
29
+ #include <winsock2.h>
16
-
30
+
17
- include <windows.h>
31
+ #include <windows.h>
18
-
32
+
19
- include <stdio.h>
33
+ #include <stdio.h>
20
-
34
+
21
- include <conio.h>
35
+ #include <conio.h>
22
-
36
+
23
- pragma warning(disable : 4996)
37
+ #pragma warning(disable : 4996)
24
38
 
25
39
 
26
40
 
@@ -32,9 +46,9 @@
32
46
 
33
47
 
34
48
 
35
- define IP_ADD_TEMP "0.0.0."//IPアドレステンプレ(同じネットワーク下なら使える)
49
+ #define IP_ADD_TEMP "0.0.0."//IPアドレステンプレ(同じネットワーク下なら使える)
36
-
50
+
37
- define PORT_TEMP 1234 //PORT番号設定(クライアント/サーバで必ず合わせる)
51
+ #define PORT_TEMP 1234 //PORT番号設定(クライアント/サーバで必ず合わせる)
38
52
 
39
53
 
40
54
 
@@ -204,29 +218,11 @@
204
218
 
205
219
 
206
220
 
207
-
208
-
209
-
210
-
211
-  
212
-
213
-  
214
-
215
-  
216
-
217
-
218
-
219
-
220
-
221
-   
222
-
223
- ---------------------------------------------------------------------------------- 
221
+ ------------------------------------------------------------------------------------------
224
-
225
-
226
-
222
+
227
- RaspberryPi側のソースコード
223
+ RaspberryPi側のソースコード(言語:Python)
228
-
224
+
229
- ソケット通信プログラム
225
+ #ソケット通信プログラム
230
226
 
231
227
  import socket
232
228
 
@@ -270,7 +266,7 @@
270
266
 
271
267
 
272
268
 
273
- ここから下はグラフ表示プログラム
269
+ #ここから下はグラフ表示プログラム
274
270
 
275
271
  import numpy as np
276
272
 
@@ -282,7 +278,7 @@
282
278
 
283
279
  plt.figure()
284
280
 
285
- x軸の幅を100にする
281
+ #x軸の幅を100にする
286
282
 
287
283
  xlim = [0, 100]
288
284
 
@@ -292,7 +288,7 @@
292
288
 
293
289
  while True:
294
290
 
295
- 画面をクリア
291
+ #画面をクリア
296
292
 
297
293
  plt.cla()
298
294
 
@@ -300,7 +296,7 @@
300
296
 
301
297
  X.append(len(Y))
302
298
 
303
- xに100個以上格納されたら
299
+ #xに100個以上格納されたら
304
300
 
305
301
  if len(X) > 100:
306
302
 
@@ -312,13 +308,13 @@
312
308
 
313
309
  plt.plot(X, Y)
314
310
 
315
- x軸、y軸方向の表示範囲を設定
311
+ #x軸、y軸方向の表示範囲を設定
316
312
 
317
313
  plt.ylim(-1, 100)
318
314
 
319
315
  plt.xlim(xlim[0], xlim[1])
320
316
 
321
- 描写
317
+ #描写
322
318
 
323
319
  plt.pause(0.1)
324
320
 
@@ -326,38 +322,8 @@
326
322
 
327
323
 
328
324
 
329
-
330
-
331
-
332
-
333
- しかし,このプログラムではRaspberryPi側は数値情報を1回しか受信できないため,グラフを途中で変化させることができません(図1のようにyの値が一定のグラフしか出力できない)。このプログラムを複数回の送受信ができるように改良し,グラフをリアルタイムで変化させるにはどうすれば良いでしょうか?(図2のようにyの値を変化させたい)
334
-
335
-
336
-
337
- 説明が下手で申し訳ありません。よろしくお願いいたします。(現在のプログラムでは1回しか送受信ができないため,図1のようなグラフしか出力できません。これをリアルタイムで複数回の送受信ができるようにし,図2のようなグラフを作成したいです。)
338
-
339
-
340
-
341
- ![イメージ説明](0906bbc62b2bb82ef1c4b0b28260dc3c.png)
342
-
343
-
344
-
345
- ### 該当のソースコード
346
-
347
325
  ```
348
326
 
349
- PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
350
-
351
- https://drive.google.com/file/d/1VFgWMK5vqEc7DCI37BsIy_LFUkVkwRpS/view?usp=sharing
352
-
353
-
354
-
355
- RaspberryPi側のソースコード(言語:Python)
356
-
357
- https://drive.google.com/file/d/1QL1zc8OgwaFZqbxubHfseH3r312ewFKy/view?usp=sharing
358
-
359
- ```
360
-
361
327
 
362
328
 
363
329
  ### 補足情報(FW/ツールのバージョンなど)

1

書式の改善

2021/02/22 09:02

投稿

sk009
sk009

スコア0

test CHANGED
File without changes
test CHANGED
@@ -10,44 +10,354 @@
10
10
 
11
11
  ①PC側のソースコード
12
12
 
13
+
14
+
15
+ include <winsock2.h>
16
+
17
+ include <windows.h>
18
+
19
+ include <stdio.h>
20
+
21
+ include <conio.h>
22
+
23
+ pragma warning(disable : 4996)
24
+
25
+
26
+
27
+ WSADATA wsaData;
28
+
29
+ struct sockaddr_in addr;
30
+
31
+ int sockw;
32
+
33
+
34
+
35
+ define IP_ADD_TEMP "0.0.0."//IPアドレステンプレ(同じネットワーク下なら使える)
36
+
37
+ define PORT_TEMP 1234 //PORT番号設定(クライアント/サーバで必ず合わせる)
38
+
39
+
40
+
41
+ int main()
42
+
43
+ {
44
+
45
+ char buf[40];
46
+
47
+ int n, i;
48
+
49
+ char aaa[] = "127.0.0.1";
50
+
51
+
52
+
53
+ // winsock2の初期化
54
+
55
+ if (WSAStartup(MAKEWORD(2, 0), &wsaData))
56
+
57
+ {
58
+
59
+ puts("reset winsock failed");
60
+
61
+ return -1;
62
+
63
+ }
64
+
65
+
66
+
67
+ // Server に connect して COMMAND を送信する
68
+
69
+
70
+
71
+ // ソケットの作成
72
+
73
+ sockw = socket(AF_INET, SOCK_STREAM, 0);
74
+
75
+ if (sockw == INVALID_SOCKET)
76
+
77
+
78
+
79
+ {
80
+
81
+ puts("make socket failed");
82
+
83
+ return -1;
84
+
85
+ }
86
+
87
+
88
+
89
+ // IPアドレス作成(defineを使う場合)
90
+
91
+ /*
92
+
93
+ char ip_add[30] = IP_ADD_TEMP;
94
+
95
+ strcat(ip_add, argv[1]);
96
+
97
+ */
98
+
99
+
100
+
101
+ //IPアドレス作成(すべて打ち込み)
102
+
103
+ char ip_add[30];
104
+
105
+ for (int i = 0; i < 30; i++)
106
+
107
+ ip_add[i] = NULL;
108
+
109
+ strcpy_s(ip_add, aaa);
110
+
111
+
112
+
113
+
114
+
115
+ // 接続先指定用構造体の準備
116
+
117
+ addr.sin_family = AF_INET;
118
+
119
+ addr.sin_port = htons(PORT_TEMP);
120
+
121
+ addr.sin_addr.S_un.S_addr = inet_addr(ip_add);
122
+
123
+
124
+
125
+ // サーバーに接続
126
+
127
+ if (connect(sockw, (struct sockaddr*)&addr, sizeof(addr)))
128
+
129
+ {
130
+
131
+ puts("connect failed");
132
+
133
+ return -1;
134
+
135
+ }
136
+
137
+
138
+
139
+ // RaspberryPiに数値情報を送る
140
+
141
+ n = send(sockw, "50", strlen("50"), 0);
142
+
143
+ if (n < 0)
144
+
145
+ {
146
+
147
+ puts("send failed");
148
+
149
+ return -1;
150
+
151
+ }
152
+
153
+
154
+
155
+ // サーバーからデータを受信
156
+
157
+ memset(buf, 0, 40);
158
+
159
+ n = recv(sockw, buf, 40, 0);
160
+
161
+ if (n < 0)
162
+
163
+ {
164
+
165
+ puts("recv failed");
166
+
167
+ return -1;
168
+
169
+ }
170
+
171
+
172
+
173
+ puts(buf);
174
+
175
+
176
+
177
+ while (1) {
178
+
179
+ if (kbhit() != 0)
180
+
181
+ {
182
+
183
+ break;
184
+
185
+ }
186
+
187
+ }
188
+
189
+
190
+
191
+ // ソケットのクローズ
192
+
193
+ closesocket(sockw);
194
+
195
+
196
+
197
+ // winsock2 の終了処理
198
+
199
+ WSACleanup();
200
+
201
+ return 0;
202
+
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+  
212
+
213
+  
214
+
215
+  
216
+
217
+
218
+
219
+
220
+
221
+   
222
+
223
+ ---------------------------------------------------------------------------------- 
224
+
225
+
226
+
227
+ ②RaspberryPi側のソースコード
228
+
229
+ ソケット通信プログラム
230
+
231
+ import socket
232
+
233
+
234
+
235
+ host = "127.0.0.1"
236
+
237
+ port = 1234
238
+
239
+
240
+
241
+ serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
242
+
243
+ serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
244
+
245
+ serversock.bind((host,port)) #IPとPORTを指定してバインドします
246
+
247
+ serversock.listen(10) #接続の待ち受けをします(キューの最大数を指定)
248
+
249
+
250
+
251
+ print('Waiting for connections...')
252
+
253
+ clientsock, client_address = serversock.accept() #接続されればデータを格納
254
+
255
+
256
+
257
+ for i in range ( 1 ):
258
+
259
+ rcvmsg = clientsock.recv(1024).decode()
260
+
261
+ print('Received : %s' % (rcvmsg))
262
+
263
+ s_msg = "def"
264
+
265
+ print('Send : %s' % s_msg)
266
+
267
+ clientsock.sendall(s_msg.encode())
268
+
269
+ clientsock.close()
270
+
271
+
272
+
273
+ ここから下はグラフ表示プログラム
274
+
275
+ import numpy as np
276
+
277
+ from matplotlib import pyplot as plt
278
+
279
+ import random
280
+
281
+
282
+
283
+ plt.figure()
284
+
285
+ x軸の幅を100にする
286
+
287
+ xlim = [0, 100]
288
+
289
+ X, Y = [], []
290
+
291
+
292
+
293
+ while True:
294
+
295
+ 画面をクリア
296
+
297
+ plt.cla()
298
+
299
+ Y.append(int(rcvmsg))
300
+
301
+ X.append(len(Y))
302
+
303
+ xに100個以上格納されたら
304
+
305
+ if len(X) > 100:
306
+
307
+ xlim[0] += 1
308
+
309
+ xlim[1] += 1
310
+
311
+
312
+
313
+ plt.plot(X, Y)
314
+
315
+ x軸、y軸方向の表示範囲を設定
316
+
317
+ plt.ylim(-1, 100)
318
+
319
+ plt.xlim(xlim[0], xlim[1])
320
+
321
+ 描写
322
+
323
+ plt.pause(0.1)
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+ しかし,このプログラムではRaspberryPi側は数値情報を1回しか受信できないため,グラフを途中で変化させることができません(図1のようにyの値が一定のグラフしか出力できない)。このプログラムを複数回の送受信ができるように改良し,グラフをリアルタイムで変化させるにはどうすれば良いでしょうか?(図2のようにyの値を変化させたい)
334
+
335
+
336
+
337
+ 説明が下手で申し訳ありません。よろしくお願いいたします。(現在のプログラムでは1回しか送受信ができないため,図1のようなグラフしか出力できません。これをリアルタイムで複数回の送受信ができるようにし,図2のようなグラフを作成したいです。)
338
+
339
+
340
+
341
+ ![イメージ説明](0906bbc62b2bb82ef1c4b0b28260dc3c.png)
342
+
343
+
344
+
345
+ ### 該当のソースコード
346
+
347
+ ```
348
+
349
+ PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
350
+
13
351
  https://drive.google.com/file/d/1VFgWMK5vqEc7DCI37BsIy_LFUkVkwRpS/view?usp=sharing
14
352
 
15
353
 
16
354
 
17
- RaspberryPi側のソースコード
355
+ RaspberryPi側のソースコード(言語:Python)
18
356
 
19
357
  https://drive.google.com/file/d/1QL1zc8OgwaFZqbxubHfseH3r312ewFKy/view?usp=sharing
20
358
 
21
-
22
-
23
- しかし,このプログラムではRaspberryPi側は数値情報を1回しか受信できないため,グラフを途中で変化させることができません(図1のようにyの値が一定のグラフしか出力できない)。このプログラムを複数回の送受信ができるように改良し,グラフをリアルタイムで変化させるにはどうすれば良いでしょうか?(図2のようにyの値を変化させたい)
24
-
25
-
26
-
27
- 説明が下手で申し訳ありません。よろしくお願いいたします。(現在のプログラムでは1回しか送受信ができないため,図1のようなグラフしか出力できません。これをリアルタイムで複数回の送受信ができるようにし,図2のようなグラフを作成したいです。)
28
-
29
-
30
-
31
- ![イメージ説明](0906bbc62b2bb82ef1c4b0b28260dc3c.png)
32
-
33
-
34
-
35
- ### 該当のソースコード
36
-
37
359
  ```
38
360
 
39
- PC側のソースコード(言語:C言語,開発環境:Visual Studio2017)
40
-
41
- https://drive.google.com/file/d/1VFgWMK5vqEc7DCI37BsIy_LFUkVkwRpS/view?usp=sharing
42
-
43
-
44
-
45
- RaspberryPi側のソースコード(言語:Python)
46
-
47
- https://drive.google.com/file/d/1QL1zc8OgwaFZqbxubHfseH3r312ewFKy/view?usp=sharing
48
-
49
- ```
50
-
51
361
 
52
362
 
53
363
  ### 補足情報(FW/ツールのバージョンなど)