Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.

Damit Sie Pyson so einfach wie möglich machen können

Sowohl RaspberryPi als auch Pyson haben gerade erst begonnen und es ist ziemlich schwierig. Also habe ich es aus dem ernsthaften Wunsch heraus versucht, Python auf VisualStudio zu debuggen. Irgendwie habe ich das Gefühl, ich kann gehen. Ich denke nicht, dass die Hürden für die Vorbereitung der Umwelt hoch sind. Warum also nicht versuchen?

Ziel

Ich möchte die Änderungsschleife mit Sakura Editor, das Übertragen mit WinSCP und das Ausführen von Python von TeraTerm reduzieren.

Eine einfache mit geringer Funktionalität ist gut.

Ich möchte Dinge vermeiden, die nicht mehr benötigt werden, wenn ich mich an Pyson gewöhnt habe.

Gegenmaßnahmenplan

Es scheint, dass Python auch mit Visual Studio funktioniert. Es scheint, dass Sie auch Ihre bevorzugte "Schrittausführung" durchführen können.

Prüfung von Gegenmaßnahmen

Ich konnte nicht mehrere Pläne in Betracht ziehen, da ich nicht viel über Python weiß, aber ich möchte es verschieben, weil es schwierig ist, die "Schrittausführung" im Thema der Stärkung des Debuggens wegzuwerfen. Um es in Visual Studio auszuführen, kann es nicht unter Win10 ausgeführt werden, da es nicht kompiliert werden kann (es ist nicht bekannt, ob der Ausdruck geeignet ist).

** Kann nicht kompiliert werden, da keine Bibliothek vorhanden ist. Wenn du es nicht hast, musst du es schaffen. ** ** **

Vorschlag zum Erstellen einer Bibliothek

Win10 verfügt nicht über GPIO. Wenn Sie also eine temporäre GPIO-Bibliothek erstellen, können Sie diese ohne Kompilierungsfehler ausführen? Wir werden mit der Strategie antworten. RPI. Ich benutze GPIO, aber ich bin nicht besonders darüber. Im Moment ist es nur die bekannteste Wahl.

Umgebung

Windows10 64bit home VisualStudio 2019 Community Python C# Python 3.7 .NET 4.7.2 psycopg2 2.8.6 Npgsql v4.1.5 PostgreSQL PostgreSQL 13.0 64-bit A5:SQL Mk-2 2.15.1

Was diesmal zu machen

RPI der GPIO-Bibliothek. Machen Sie GPIO mit einem Dummy. Erstellen Sie ein Windows-Formularprogramm in C # für den Betrieb. RPI. PostgreSQL wird für die Kommunikation zwischen GPIO und C # verwendet. Dies liegt daran, dass die Verwendung der Kommunikation zwischen Prozessen problematisch ist und DB für diese Verwendung in Bezug auf Protokolle nützlicher ist. Sie können damit mit SQL spielen, wie Sie möchten. Python ist psicopg2 und C # ist Npgskl, um eine Verbindung zur Datenbank herzustellen.

** Simulieren Sie E / A mit SQL mit GPIO-Bibliothek und C #. ** ** **

Erstellen einer Datenbank für PostgreSQL

キャプチャ001.PNG

Ich habe eine Datenbank namens pizero erstellt und zwei Tabellen erstellt. Die Eingabetabelle dient zur Eingabe von C # in die GPIO-Bibliothek. Die Ausgabetabelle dient zur Ausgabe von der GPIO-Bibliothek nach C #.

create database pizero;

create table outputTable(
id serial
,hiduke timestamp
,pin integer
,data integer
,memo varchar(20)
);

create table inputTable(
id serial
,hiduke timestamp
,pin integer
,data integer
,memo varchar(20)
);

Python-Projekterstellung

キャプチャ002.PNG Wählen Sie Python. Wenn Sie es nicht finden können, müssen Sie es installieren. キャプチャ003.PNG キャプチャ004.PNG Es ist fertig. キャプチャ005.PNG Öffnen Sie die Python-Paketverwaltung. キャプチャ006.PNG Geben Sie psycopg2 ein. Der mit dem Aufwärtspfeil scheint ein Update zu sein, daher denke ich, dass er aktualisiert werden sollte. キャプチャ007.PNG Es war verschieden. Klicken Sie zu Beginn auf Den folgenden Befehl ausführen. キャプチャ008.PNG Klicken Sie auf Jetzt befördern. キャプチャ009.PNG Es ist fertig. キャプチャ010.PNG Es wurde der Liste hinzugefügt. キャプチャ011.PNG Machen Sie die Quelle von Python. Beim Import ist ein Fehler aufgetreten.

piTes1.py



import time
import RPi.GPIO as GPIO

PIN_IN = 2
PIN_OUT =3
PIN_OUT2 =4

GPIO.setwarnings(False)

print('start')

GPIO.setmode( GPIO.BCM )
GPIO.setup( PIN_IN, GPIO.IN )
GPIO.setup( PIN_OUT, GPIO.OUT )
GPIO.setup( PIN_OUT2, GPIO.OUT )

for i in range(3):
    inData = GPIO.input( PIN_IN )

    if( inData == GPIO.LOW ):
        print('PIN_OUT')
        GPIO.output( PIN_OUT, GPIO.HIGH )
        GPIO.output( PIN_OUT2, GPIO.LOW )
    else:
        print('PIN_OUT2')
        GPIO.output( PIN_OUT, GPIO.LOW )
        GPIO.output( PIN_OUT2, GPIO.HIGH )

GPIO.cleanup()

print('end')

キャプチャ012.PNG Fügen Sie einen neuen Artikel hinzu. キャプチャ013.PNG Erstellen Sie ein Python-Paket. Der Name ist wichtig. キャプチャ014.PNG Es ist fertig. キャプチャ015.PNG Fügen Sie auch einen neuen Artikel hinzu. Ich werde es in das Paket aufnehmen, das ich zuvor gemacht habe. Ich möchte es in ein Paket packen. キャプチャ016.PNG Erstellen Sie eine leere Physon-Datei. Der Name ist wichtig. キャプチャ017.PNG Es wurde der Liste hinzugefügt. キャプチャ018.PNG Erstellen Sie die Quelle für die GPIO-Bibliothek. Die Verbindungsinformationen zur Datenbank müssen mit der Umgebung übereinstimmen. Server: localhost Port: 5432 Datenbank: pizero Benutzer: postgres Passwort: postgres

GPIO.py



import time
import psycopg2

BCM = 1

IN = 1
OUT = 2

LOW = 0
HIGH = 1

outCount = 0
inCount = 0

connection = psycopg2.connect("host=localhost port=5432 dbname=pizero user=postgres password=postgres")
connection.autocommit = True

def setwarnings(flg):
	return 0

def setmode(mode):
	global outCount
	global inCount

	cur = connection.cursor()
	cur.execute("select coalesce(max(id),0) from outputtable")
	row = cur.fetchone()

	outCount = row[0]

	cur.execute("select coalesce(max(id),0) from inputtable")
	row = cur.fetchone()

	inCount = row[0]

	cur.close()

	return 0

def setup(pin,type):
	return 0

def cleanup():
	connection.close()
	return 0

def input(pin):
	global inCount

	ret = 0
	rowcount = 0

	while rowcount == 0:

		strSQL = "select * from inputtable where id > " + str(inCount)
		cur = connection.cursor()
		cur.execute(strSQL)
		row = cur.fetchone()

		rowcount = cur.rowcount

		if rowcount == 0:
			print('wait')
			time.sleep(5.0)

		if rowcount > 0:
			print(row)
			inCount = row[0]
			ret = row[3]

		cur.close()

	return ret

def output(pin,data):
	global outCount

	strSQL = "insert into outputtable(hiduke, pin, data, memo) values (now(), " + str(pin) + ", " + str(data) + ", 'output')"
	cur = connection.cursor()
	cur.execute(strSQL)
	cur.close()

	outCount += 1

	return 0

Es werden lediglich die von der GPIO-Bibliothek verwendeten Funktionen entsprechend definiert. Die SQL-Verarbeitung für die Kommunikation ist in der Eingabe- und Ausgabefunktion enthalten. Eingabefunktion Warten Sie endlos auf Einfügungen von C #. Alles, was größer als die Ihnen bekannte ID ist, wird als neue Daten betrachtet. Ich werde warten, aber ich werde nur einen bekommen. Ausgabefunktion Einfügen, um C # zu informieren. Ich werde es dich nur wissen lassen, also warte nicht.

キャプチャ019.PNG Beim Import ist kein Fehler aufgetreten. Ich bin glücklich.

C # -Projekterstellung

キャプチャ020.PNG Machen Sie es mit Windows Form. キャプチャ021.PNG キャプチャ022.PNG Es ist fertig. NuGet. キャプチャ023.PNG Wählen Sie die Referenz aus und suchen Sie nach Npgskl. キャプチャ024.PNG Es installieren. キャプチャ025.PNG Es wurde zu den Referenzeinstellungen hinzugefügt. キャプチャ026.PNG Machen Sie ein Formular. キャプチャ027.PNG Die C # -Quelle wurde kompiliert.

Form1.cs



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Npgsql;

namespace piTes1CS
{
    public partial class Form1 : Form
    {
        string connString = "Server=localhost;Port=5432;User Id=postgres;Password=postgres;Database=pizero";
        NpgsqlConnection conn;

        int inCount = 0;
        int outCount = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            inCount = 0;
            outCount = 0;

            conn = new NpgsqlConnection(connString);
            conn.Open();

            var strSQL = "select coalesce(max(id),0) maxid from inputtable";
            var command = new NpgsqlCommand(strSQL, conn);

            var dataReader = command.ExecuteReader();
            if (dataReader.HasRows)
            {
                dataReader.Read();
                inCount = (int)dataReader["maxid"];
            }
            dataReader.Close();

            strSQL = "select coalesce(max(id),0) maxid from outputtable";
            command = new NpgsqlCommand(strSQL, conn);

            dataReader = command.ExecuteReader();
            if (dataReader.HasRows)
            {
                dataReader.Read();
                outCount = (int)dataReader["maxid"];
            }
            dataReader.Close();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            conn.Close();
        }

        private void btnRead_Click(object sender, EventArgs e)
        {
            this.txtGPIO3.BackColor = Color.White;
            this.txtGPIO4.BackColor = Color.White;

            var strSQL = "select * from outputtable where id > " + outCount;
            var command = new NpgsqlCommand(strSQL, conn);

            var dataReader = command.ExecuteReader();
            if (dataReader.HasRows)
            {
                dataReader.Read();
                outCount = (int)dataReader["id"];
                int pin = (int)dataReader["pin"];
                int data = (int)dataReader["data"];
                string memo = (string)dataReader["memo"];

                Console.WriteLine("outCount=" + outCount + " inCount=" + inCount);

                if (pin == 3)
                {
                    this.txtGPIO3.Text = data.ToString();
                    this.txtGPIO3.BackColor = Color.Yellow;
                }
                if (pin == 4)
                {
                    this.txtGPIO4.Text = data.ToString();
                    this.txtGPIO4.BackColor = Color.Yellow;
                }
            }
            else
            {
                Console.WriteLine("wait");
            }
            dataReader.Close();
        }

        private void btnGPIO2_Click(object sender, EventArgs e)
        {
            if (this.txtGPIO2.TextLength > 0)
            {
                var strSQL = "insert into inputtable(hiduke, pin, data, memo) values (now(), 2, " + this.txtGPIO2.Text + ", 'btnWriteGPIO2')";

                var command = new NpgsqlCommand(strSQL, conn);
                command.ExecuteNonQuery();

                inCount++;
            }
        }
    }
}

Das Gegenteil von Python geschieht in C #. Fügen Sie die Daten für die Eingabefunktion der GPIO-Bibliothek mit der Schaltfläche "Senden" ein. Mit der Empfangsschaltfläche erhalten Sie Daten für die Ausgabefunktion der GPIO-Bibliothek. Der Wert wird auf GPIO3 oder GPIO4 mit der Empfangstaste angezeigt.

Versuche dich zu bewegen

キャプチャ028.PNG Verwenden Sie zum Reinigen der Tabelle "Abschneiden". Es initialisiert auch den ID-Wert.


truncate table inputtable RESTART IDENTITY;
truncate table outputtable RESTART IDENTITY;

キャプチャ029.PNG Starten Sie zwei Visual Studios und führen Sie Pyson bzw. C # aus. キャプチャ030.PNG Ich habe Python gestartet. キャプチャ031.PNG Ich habe C # gestartet. キャプチャ032.PNG Da Python auf die Eingabefunktion wartet, wird GPIO2 GPIO zugewiesen. Ich habe gerade HIGH eingestellt und die Sendetaste gedrückt. Python scheint gut zu funktionieren. キャプチャ033.PNG Nachdem Python die Ausgabefunktion zweimal ausgeführt hat, drücken Sie die Empfangstaste. GPIO3 ist GPIO. Es wird als NIEDRIG angezeigt. キャプチャ034.PNG Drücken Sie die Empfangstaste erneut. GPIO4 ist GPIO. Es wurde als HIGH angezeigt. Es scheint gut zu funktionieren. キャプチャ035.PNG キャプチャ036.PNG Dies ist der Status von DB nach dessen Abschluss.

Versuche dich zu bewegen

** Durch Erstellen eines Dummys der GPIO-Bibliothek ist es möglich, unter Win10 anstelle von RaspberryPi zu debuggen. ** ** ** In Anbetracht der Funktion auf der C # -Seite denke ich, dass es ausreicht, sie auszuführen, während das SQL geändert wird. ** Es ist kein Simulator, es ist ein Testcode, also müssen Sie etwas erstellen, das der Bewegung von Pyson entspricht **, aber wenn Sie es immer noch als einfach beurteilen können, scheint es einen Versuch wert zu sein. Es handelt sich um ein Sensorsystem. Wenn Sie das Protokoll auf der tatsächlichen Maschine abrufen und in die Tabelle einfügen, können Sie möglicherweise dieselbe Bewegung wie auf der tatsächlichen Maschine ausführen. Sie können es durchlaufen und den Wert der ausgeführten Variablen überprüfen. Auch COREi5 vor 10 Jahren ist kein Feind der Nullserie, es ist bequem.

Ich habe L Chika in der Nullserie nur wegen der IoT-Atmosphäre ausprobiert. Der nächste ist. .. ..

Derzeit gibt es zwei starke Feinde auf dem Steckbrett. Es ist ein Kreiselsensormodul und ein Motortreiber-IC, aber was wird passieren? Obwohl es weniger Teile hat als der instabile Multi-Vibrator L Chika.

Je mehr ich ein Softwarebuch lese, desto mehr kann ich tun, aber warum ist dieses System (elektronische Schaltung) nutzlos (nicht hilfreich)?

** Für Herausforderer elektronischer Arbeit auf handwerklicher Ebene ist der GPIO-Anschluss der Auswärtige. ** ** **

Ich muss mich auf die starken Gegner auf dem Steckbrett von Away konzentrieren, damit ich nicht viel Kraft habe, um Python zu vermeiden. Weil es eine Ebene ist, die den Betrieb des instabilen Multivibrators nicht erklären kann.

Recommended Posts

Versuchen Sie, Python auf Raspberry Pi mit Visual Studio zu debuggen.
Arbeiten mit GPS in Python für Raspberry Pi 3
Stellen Sie mit Python auf Raspberry Pi eine Verbindung zu MySQL her
Versuchen Sie, den RSS-Feed von arXiv mit Python von Raspeye auf Twitter zu twittern
Remote-Debugging mit Visual Studio 2017
Ubuntu 20.04 auf Himbeer-Pi 4 mit OpenCV und mit Python verwenden
Verwenden Sie vl53l0x mit RaspberryPi (Python)
Versuchen Sie es mit ArUco mit Raspberry Pi
Probieren Sie L Chika mit Himbeerpi
Versuchen Sie, 3 Servos mit Raspeye zu bewegen
Erstellen Sie Python3 für Windows 10 unter ARM mit Visual Studio 2019 (x86) unter Windows 10 unter ARM
Steuern Sie den Motor mit einem Motortreiber mit Python auf Raspberry Pi 3!
Erkennen Sie "Helligkeit" mit Python auf Raspberry Pi 3!
Adafruit Python BluefruitLE arbeitet mit Raspeye.
Versuchen Sie, eine Python-Umgebung mit Visual Studio Code & WSL zu erstellen
Versuchen Sie, mit Raspberry Pi nach Wakasagi zu fischen
Normal programmieren mit Node-RED-Programmierung mit Raspberry Pi 3
Versuchen Sie die Objekterkennung mit Raspberry Pi 4 + Coral
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Arbeiten mit Sensoren in Mathematica auf Raspberry Pi
Ermitteln Sie die Temperatur mit Python auf Raspberry Pi 3!
Führen Sie Python in C ++ unter Visual Studio 2017 aus
Erkennen Sie analoge Signale mit dem A / D-Wandler mithilfe von Python auf Raspberry Pi 3!
Verwenden Sie Python auf Raspberry Pi 3, um die LED mit Schaltersteuerung zu beleuchten!
Erkennen Sie Schiebeschalter mit Python auf Raspberry Pi 3!
Erstellen Sie eine Python-Entwicklungsumgebung mit Visual Studio Code
Versuchen Sie, QR-Code mit Raspberry Pi zu verwenden
Führen Sie Python YOLOv3 in C ++ unter Visual Studio 2017 aus
Ich habe L-Chika mit Razpai 4 (Python Edition) ausprobiert.
Erkennen Sie Magnetschalter mit Python auf Raspberry Pi 3!
Genießen Sie die elektronische Arbeit mit GPIO von Raspberry Pi
Django mit Python Tools 2.2 für Visual Studio (PTVS 2.2)
Schalten Sie Ihren PC mit Himbeer-Pi ein / aus
Versuchen Sie, mit Mongo in Python auf dem Mac zu arbeiten
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Stellen Sie DHT11 mit Raspeye + Python zur Verfügung (Hinweis)
Lassen Sie den Summer mit Python auf Raspberry Pi 3 erklingen!
Erstellen Sie eine Python-Entwicklungsumgebung auf Raspberry Pi
GPS-Tracking mit Raspeye 4B + BU-353S4 (Python)
Messen Sie die CPU-Temperatur von Raspeye mit Python
Versuchen Sie es mit Python.
GPGPU mit Raspberry Pi
Pigpio auf Himbeer-Pi
DigitalSignage mit Raspberry Pi
Cython auf Raspberry Pi
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen
Notieren Sie Temperatur und Luftfeuchtigkeit mit systemd auf Raspberry Pi
Führen Sie die LED-Matrix interaktiv mit Raspberry Pi 3B + auf Slackbot aus
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
Steuern Sie bürstenlose Motoren mit GPIO von Raspberry Pi Zero
Python-Entwicklungsumgebung mit Windows + Anaconda3 + Visual Studio Code
Python-Entwicklungsumgebung mit Windows + Python + PipEnv + Visual Studio-Code
Japanische Ausgabe beim Umgang mit Python im Visual Studio
Installieren Sie pyenv auf Raspberry Pi, um Python zu verwalten
Ausgabe auf "7 Segment LED" mit Python mit Raspberry Pi 3!
Fehlerbehebung bei der Installation von OpenCV auf Raspberry Pi und der Erfassung
Zeigen Sie das Bild der USB-Kamera mit OpenCV von Python mit Raspeye an
Lassen Sie uns GPIO von Raspeye mit Python CGI betreiben