質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

2回答

3426閲覧

Android PC シリアル接続 COMポートとMACアドレスの紐づけ

dowble

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2020/08/07 02:53

編集2022/01/12 10:55

前提・実現したいこと

PC-Android間でBluetoothのシリアル接続を用いてファイルを送受信するプログラムを作っています。
サーバPCは1台、クライアントAndroid端末は複数台、オフライン環境での使用を想定しています。

現在、PC側でシリアルポートのオープン、Android側でPCのMACアドレスを指定して通信・ファイル送受信ができています。

今の実装方法だと、すべてのAndroid端末にファイルが送られてくることになるので、
特定のAndroid端末にだけファイルを送信するといった感じに修正したいのですが、全く方法が分かりません。
PC側でCOMポートとAndroid端末のMACアドレスを紐づけることができればいけるのかなと考えましたが、可能なものなのでしょうか?

PC側のソースコードを掲載させていただきます。
考えられる方法があればご教授よろしくお願いします。

該当のソースコード

FTP

1Imports System.IO 2Imports System.Text 3Public Class FTP 4 5 6 Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load 7 8 ' シリアルポートのオープン 9 SerialPort1.PortName = "COM3" 10 11 ' シリアルポートの通信速度指定 12 SerialPort1.BaudRate = 9600 13 ' シリアルポートのパリティ指定 14 SerialPort1.Parity = IO.Ports.Parity.None 15 ' シリアルポートのビット数指定 16 SerialPort1.DataBits = 8 17 ' シリアルポートのストップビット指定 18 SerialPort1.StopBits = IO.Ports.StopBits.One 19 20 Button1.FlatStyle = FlatStyle.Flat 21 Button2.FlatStyle = FlatStyle.Popup 22 Button3.FlatStyle = FlatStyle.Standard 23 Button4.FlatStyle = FlatStyle.System 24 25 26 End Sub 27 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 28 '接続ボタン 29 30 Try 31 If SerialPort2.IsOpen = True Then 'ポートはオープン済み 32 MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 33 Exit Sub 34 End If 35 36 SerialPort2.Open() 'ポートオープン 37 38 Catch ex As Exception 39 '例外処理 40 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 41 End Try 42 43 End Sub 44 45 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 46 '終了ボタン 47 '接続切断 48 If SerialPort1.IsOpen = True Then 'ポートオープン済み 49 50 SerialPort1.Close() 'ポートクローズ 51 52 End If 53 54 MessageBox.Show("接続が切断されました。") 55 56 End Sub 57 58 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 59 60 61 '送信ボタン 62 63 If SerialPort1.IsOpen = True Then 'ポートはオープン済み 64 MessageBox.Show("オープン済み", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 65 Exit Sub 66 End If 67 68 SerialPort1.Open() 'ポートオープン 69 70 'JSONファイルの送信 71 72 Dim sr As New StreamReader("C:\temp\SampleData.json", Encoding.GetEncoding("UTF-8")) 73 74 Dim text As String = sr.ReadToEnd() 75 sr.Close() 76 77 Dim sr1 As New StreamReader("C:\temp\sample1.json", Encoding.GetEncoding("UTF-8")) 78 Dim text1 As String = sr1.ReadToEnd() 79 80 sr1.Close() 81 82 '送信するテキストがない場合、データ送信は行わない. 83 If String.IsNullOrEmpty(text) Then 84 85 SerialPort1.Close() 86 Return 87 88 End If 89 90 'シリアルポートからテキストを送信する. 91 Try 92 93 SerialPort1.Encoding = Encoding.GetEncoding(65001) 94 SerialPort1.Write(text) 95 SerialPort1.Close() 96 End 97 98 Catch ex As InvalidOperationException 99 100 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 101 102 End Try 103 104 End Sub 105 106 Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click 107 '受信ボタン 108 109 'バイト配列 110 Dim bytRead As Byte() = New Byte(255) {} 111 112 'TCP受信(バッファ領域まで) 113 Dim intBytes As Integer 114 115 Try 116 117 intBytes = SerialPort1.Read(bytRead, 0, bytRead.Count) 118 119 Catch ex As InvalidOperationException 120 121 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 122 123 End Try 124 125 126 'TCP受信(バッファ領域まで) 127 ' Dim intBytes As Integer = SerialPort1.Read(bytRead, 0, bytRead.Count) 128 129 If intBytes = 0 Then 130 Close() 131 End If 132 133 '受信したデータを文字列に変換 134 Dim enc As Encoding = Encoding.GetEncoding("UTF-8") 135 Dim resMsg As String = enc.GetString(bytRead, 0, intBytes) 136 137 '末尾の\rを削除 138 resMsg = resMsg.TrimEnd(ControlChars.Cr) 139 140 Dim sw As New System.IO.StreamWriter("C:\temp\test.txt", False, System.Text.Encoding.GetEncoding("SHIFT-JIS")) 141 sw.WriteLine(resMsg) 142 sw.Close() 143 144 End Sub 145 146End Class

補足情報(FW/ツールのバージョンなど)

VisualStudio 2019 VB.Net

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/08/07 03:16

話が唐突で少々意味不明です。PC側がシリアルポート接続、Android側ではPCのMACアドレスを指定する、ということはBluetoothでのシリアル通信でしょうか。
dowble

2020/08/07 03:27

はい、Bluetoothでのシリアル通信です。 情報が足りず申し訳ありません。
guest

回答2

0

AndroidのBluetoothシリアル通信(SPP)であれば、Android端末とPCはあらかじめペアリングしているはずです。ですのでその時点で1対1です。複数のAndroid端末をつなげる場合、ペアリングをすると恐らくCOMポートが増えるのではないでしょうか。それでそれぞれ1対1になります。PC側のソフトで複数のCOMポートを相手に通信するようなかたちになるはずです。

投稿2020/08/07 03:33

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

シリアル通信にMACアドレスなるものは存在しません
まあ、シリアルの通信フォーマットにMACアドレスを含めるようにして、受信側で自分のMACアドレスを調べて合致するかどうかで通信の受け入れ可否を判断するってことはできます。

まあ、そもそもシリアル通信は1対1の通信なので、接続先は決まってるもんですが。

投稿2020/08/07 03:20

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問