【ラズパイ】ネットワークでデータを送信する。

こんな感じで、ラズパイのデータをWindows PCへ送信させたいと思います。

ラズパイ側はPythonでHATのセンサーにアクセスしているので、Pythonで送信を行います。

Windows側は、言語は何でも良いのですが、今回はC#で書こうと思います。

とりあえず、今回は通信ができるところまでを確認します。

ラズパイ側のソースはこんな感じ。

import json
import urllib.request

url = 'http://192.168.1.3:8000'
data = {
    'foo': 123,
}
headers = {
    'Content-Type': 'application/json',
}

req = urllib.request.Request(url, json.dumps(data).encode(), headers)
with urllib.request.urlopen(req) as res:
    body = res.read()

こちらのソースコードを丸パクリです。

https://qiita.com/hoto17296/items/8fcf55cc6cd823a18217

Windows側のコードはこんな感じです。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace http_server
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                HttpListener listener = new HttpListener();
                listener.Prefixes.Add("http://192.168.1.3:8000/");
                listener.Start();
                while (true)
                {
                    HttpListenerContext context = listener.GetContext();
                    HttpListenerRequest req = context.Request;
                    StreamReader reader = new System.IO.StreamReader(req.InputStream, req.ContentEncoding);
                    string s = reader.ReadToEnd();
                    Console.WriteLine(s);
                    HttpListenerResponse res = context.Response;
                    res.StatusCode = 200;
                    byte[] content = Encoding.UTF8.GetBytes("HELLO");
                    res.OutputStream.Write(content, 0, content.Length);
                    res.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
        }
    }
}

ホントにデータを送受信するだけのコードで、エラーとかは全く考慮していません。

Windows側のプログラムを先に実行し、その後ラズパイのコードを実行すると、Windows側のコンソールにこんな感じで出力されます。

これをカスタマイズすればセンサーの情報もWindows PCに送信できそうです。

【C#】【ピクロス】【ALTSEED】パレットから数字を入力する

前回までの状況はこちら。

最新ソースはこちら。(gitHub)

https://github.com/takishita2nd/Picross

パレットの数字をクリックすることでダイアログの数字を入力する処理を作っていきます。

主にDialogクラスの実装です。

class Dialog
{
    private string _rowValue = "10";
    private string _colValue = "10";
    private TextBox _selectedTextBox = null;
    private string _selectedValue = string.Empty;

        public void OnClick(asd.Vector2DF pos)
        {
            if (_palette.IsShow() == false)
            {
                if (_rowText.isClick(pos))
                {
                    _selectedTextBox = _rowText;
                    _selectedValue = _rowValue;
                    _palette.Show(pos);
                }
                if (_colText.isClick(pos))
                {
                    _selectedTextBox = _colText;
                    _selectedValue = _colValue;
                    _palette.Show(pos);
                }
                if (_button.isClick(pos))
                {
                    _button.OnClick();
                }
            }
            else
            {
                if (_palette.IsClick(pos))
                {
                    string v = _palette.GetClickValue(pos);
                    _selectedValue = updateTextValue(_selectedTextBox, _selectedValue, v);
                    if (_selectedTextBox.Equals(_rowText))
                    {
                        _rowValue = _selectedValue;
                    }
                    else
                    {
                        _colValue = _selectedValue;
                    }
                }
                else
                {
                    _palette.Hide();
                    _selectedTextBox = null;
                    _selectedValue = string.Empty;
                }
            }
        }

        private string updateTextValue(TextBox textBox, string value, string v)
        {
            string text = string.Empty;
            switch (v)
            {
                case Palette.CODE.BS:
                    if(value.Length != 0)
                    {
                        text = value.Remove(value.Length - 1);
                    }
                    break;
                case Palette.CODE.CLR:
                    text = string.Empty;
                    break;
                default:
                    if(value.Length < 2)
                    {
                        text = value + v;
                    }
                    else
                    {
                        text = value;
                    }
                    break;
            }
            textBox.SetText(text);
            return text;
        }
    }

テキストボックスがROWとCOLの二つがあるので、テキストボックスをクリックしたときに、どちらをクリックしたかを記憶しておきます。

パレットがクリックされた場合、何がクリックされたかをパレットから取得します。

その値を確認し、その数字をテキストボックスの値に文字列追加していきます。

しかし、今のところ、数字は2桁までとしておきます。

なので、桁が2桁オーバーしたり、0桁以下にならないようにガードかけておきます。

あ、0を入力できないや。

次回までに修正しておきまーす。