0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

iOSからラズベリーパイに接続する

Posted at

方法1: HTTPサーバーを使用する

ラズベリーパイ側

  1. ラズベリーパイ上で簡単なHTTPサーバーをセットアップします。Flaskなどの軽量なPythonウェブフレームワークを使用することができます。

    from flask import Flask, request
    
    app = Flask(__name__)
    
    @app.route('/upload', methods=['POST'])
    def upload_file():
        file = request.files['file']
        file.save('/path/to/save/' + file.filename)
        return 'File uploaded successfully'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    
  2. このスクリプトを実行して、ラズベリーパイ上でHTTPサーバーを起動します。

    python3 your_script_name.py
    

iOS側

iOSアプリからラズベリーパイにHTTPリクエストを送信してファイルをアップロードします。URLSessionを使用します。

import Foundation

func uploadCoordinatesToServer(latitude: Double, longitude: Double) {
    let url = URL(string: "http://your_raspberry_pi_ip:5000/upload")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"

    let boundary = UUID().uuidString
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")

    let fileName = "coordinates.txt"
    let coordinateString = "Latitude: \(latitude), Longitude: \(longitude)\n"
    let fileData = coordinateString.data(using: .utf8)!

    var body = Data()
    body.append("--\(boundary)\r\n")
    body.append("Content-Disposition: form-data; name=\"file\"; filename=\"\(fileName)\"\r\n")
    body.append("Content-Type: text/plain\r\n\r\n")
    body.append(fileData)
    body.append("\r\n")
    body.append("--\(boundary)--\r\n")

    let task = URLSession.shared.uploadTask(with: request, from: body) { data, response, error in
        if let error = error {
            print("Error: \(error)")
            return
        }
        print("File uploaded successfully")
    }

    task.resume()
}

extension Data {
    mutating func append(_ string: String) {
        if let data = string.data(using: .utf8) {
            append(data)
        }
    }
}

方法2: FTPサーバーを使用する

ラズベリーパイ側

  1. ラズベリーパイ上でFTPサーバーをセットアップします。vsftpdなどのFTPサーバーをインストールします。

    sudo apt update
    sudo apt install vsftpd
    sudo systemctl start vsftpd
    sudo systemctl enable vsftpd
    
  2. 必要に応じて、/etc/vsftpd.confファイルを編集してFTPサーバーを設定します。

iOS側

iOSアプリからFTPサーバーにファイルをアップロードするために、第三者のFTPライブラリを使用します。以下は、BlueSocketライブラリを使用した例です。

import Foundation
import BlueSocket

func uploadCoordinatesToFTPServer(latitude: Double, longitude: Double) {
    let coordinateString = "Latitude: \(latitude), Longitude: \(longitude)\n"
    guard let fileData = coordinateString.data(using: .utf8) else { return }
    let ftpServerIP = "your_raspberry_pi_ip"
    let ftpUsername = "your_username"
    let ftpPassword = "your_password"
    let ftpFilePath = "/path/to/save/coordinates.txt"

    let ftpClient = FTPClient()
    ftpClient.connect(to: ftpServerIP)
    ftpClient.login(username: ftpUsername, password: ftpPassword)
    ftpClient.upload(data: fileData, to: ftpFilePath)
    ftpClient.disconnect()
}

class FTPClient {
    private var controlSocket: Socket?

    func connect(to ip: String, port: Int32 = 21) {
        do {
            controlSocket = try Socket.create()
            try controlSocket?.connect(to: ip, port: port)
            // Handle server response...
        } catch {
            print("Failed to connect: \(error)")
        }
    }

    func login(username: String, password: String) {
        // Send USER and PASS commands to the FTP server...
    }

    func upload(data: Data, to path: String) {
        // Send STOR command and upload data to the FTP server...
    }

    func disconnect() {
        controlSocket?.close()
    }
}

上記のコードは基本的な構造を示したものです。実際の実装ではFTPプロトコルに従った詳細なコマンドのやり取りが必要です。

まとめ

以上の方法により、iOSからラズベリーパイにファイルを送信することができます。HTTPサーバーを使用する方法が比較的簡単であり、セキュアな接続(HTTPS)も簡単に設定できます。FTPサーバーを使用する方法も可能ですが、セキュリティの面で注意が必要です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?