Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.

Pour que vous puissiez créer Pyson aussi facilement que possible

RaspberryPi et Pyson viennent de commencer, et c'est assez difficile. Donc, je l'ai essayé avec le désir sincère de déboguer Python sur VisualStudio. D'une manière ou d'une autre, je sens que je peux y aller. Je ne pense pas que les obstacles à la préparation de l'environnement soient élevés, alors pourquoi ne pas essayer?

Cible

Je veux réduire la boucle de modification avec Sakura Editor, de transfert avec WinSCP et d'exécution de Python à partir de TeraTerm.

Un simple avec de faibles fonctionnalités est bon.

Je veux éviter les choses qui ne sont plus nécessaires une fois que je me suis habitué à Pyson.

Plan de contre-mesures

Il semble que Pyson fonctionne également avec Visual Studio. Il semble que vous puissiez également faire votre "exécution pas à pas" préférée.

Examen des contre-mesures

Je ne pouvais pas envisager plusieurs plans parce que je n'avais pas beaucoup de connaissances sur Python, mais j'aimerais le déplacer parce que "l'exécution des étapes" est difficile à jeter dans le domaine du renforcement du débogage. Afin de l'exécuter sur Visual Studio, il ne peut pas être exécuté sur Win10 car il ne peut pas être compilé (on ne sait pas si l'expression est appropriée).

** Impossible de compiler car il n'y a pas de bibliothèque. Si vous ne l'avez pas, vous devez le faire. ** **

Proposition de création d'une bibliothèque

Win10 n'a pas de GPIO, donc si vous créez une bibliothèque GPIO temporaire, pouvez-vous l'exécuter sans erreur de compilation? Nous répondrons avec la stratégie. RPI. J'utilise GPIO, mais je ne suis pas particulier à ce sujet. Pour l'instant, c'est juste le choix le plus familier.

environnement

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

Que faire cette fois

Bibliothèque GPIO RPI. Faites GPIO avec un mannequin. Créez un programme de formulaire Windows en C # pour l'opération. RPI. PostgreSQL est utilisé pour la communication entre GPIO et C #. Cela est dû au fait qu'il est gênant d'utiliser la communication inter-processus, et DB est plus utile pour cette utilisation en termes de journaux. Vous pouvez jouer avec lui comme vous le souhaitez avec SQL. Python est psicopg2 et C # est Npgskl pour se connecter à la base de données.

** Simulez les E / S à l'aide de SQL avec la bibliothèque GPIO et C #. ** **

Créer une base de données pour PostgreSQL

キャプチャ001.PNG

J'ai créé une base de données appelée pizero et créé deux tables. inputtable est pour l'entrée, de C # à la bibliothèque GPIO. outputtable est pour la sortie, de la bibliothèque GPIO vers 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)
);

Création de projet Python

キャプチャ002.PNG Sélectionnez Python. Si vous ne le trouvez pas, vous devez l'installer. キャプチャ003.PNG キャプチャ004.PNG C'est fait. キャプチャ005.PNG Ouvrez la gestion des packages Python. キャプチャ006.PNG Entrez psycopg2. Celui avec la flèche vers le haut semble être une mise à jour, donc je pense qu'il devrait être mis à jour. キャプチャ007.PNG Cela a été varié. Au début, cliquez sur Exécuter la commande suivante. キャプチャ008.PNG Cliquez sur Promouvoir maintenant. キャプチャ009.PNG C'est fait. キャプチャ010.PNG Il a été ajouté à la liste. キャプチャ011.PNG Faites la source de Python. Une erreur s'est produite lors de l'importation.

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 Ajoutez un nouvel élément. キャプチャ013.PNG Créez un package Python. Le nom est important. キャプチャ014.PNG C'est fait. キャプチャ015.PNG Ajoutez également un nouvel élément. Je l'ajouterai dans le package que j'ai créé plus tôt. Je veux le mettre dans un paquet. キャプチャ016.PNG Créez un fichier Physon vide. Le nom est important. キャプチャ017.PNG Il a été ajouté à la liste. キャプチャ018.PNG Créez la source de la bibliothèque GPIO. Les informations de connexion à la base de données doivent correspondre à l'environnement. Serveur: localhost Port: 5432 Base de données: pizero L'utilisateur: postgres Mot de passe: 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

Il définit simplement les fonctions utilisées par la bibliothèque GPIO de manière appropriée. Le traitement SQL pour la communication est inclus dans la fonction d'entrée et la fonction de sortie. fonction d'entrée Attendez sans fin les insertions de C #. Tout ce qui est plus grand que l'identifiant que vous connaissez est considéré comme de nouvelles données. J'attendrai, mais je n'en aurai qu'un. fonction de sortie Insérer pour informer C #. Je vais juste vous le faire savoir, alors n'attendez pas.

キャプチャ019.PNG Il n'y a pas d'erreur d'importation. Je suis heureux.

Création de projet C

キャプチャ020.PNG Faites-le avec le formulaire Windows. キャプチャ021.PNG キャプチャ022.PNG C'est fait. NuGet. キャプチャ023.PNG Sélectionnez la référence et recherchez Npgskl. キャプチャ024.PNG Installez-le. キャプチャ025.PNG Il a été ajouté aux paramètres de référence. キャプチャ026.PNG Faites un formulaire. キャプチャ027.PNG La source C # a été compilée.

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++;
            }
        }
    }
}

Le contraire de Python se fait en C #. Insérez les données pour la fonction d'entrée de la bibliothèque GPIO avec le bouton d'envoi. Obtenez une donnée pour la fonction de sortie de la bibliothèque GPIO avec le bouton de réception. La valeur est affichée sur GPIO3 ou GPIO4 avec le bouton de réception.

Essayez de bouger

キャプチャ028.PNG Pour nettoyer la table, utilisez truncate. Il initialise également la valeur id.


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

キャプチャ029.PNG Lancez deux Visual Studios et exécutez respectivement Pyson et C #. キャプチャ030.PNG J'ai commencé Python. キャプチャ031.PNG J'ai commencé C #. キャプチャ032.PNG Puisque Python attend la fonction d'entrée, GPIO2 est assigné à GPIO. J'ai juste mis HIGH et appuyé sur le bouton d'envoi. Python semble fonctionner correctement. キャプチャ033.PNG Une fois que Python a exécuté la fonction de sortie deux fois, appuyez sur le bouton de réception. GPIO3 est GPIO. Il est affiché comme FAIBLE. キャプチャ034.PNG Appuyez à nouveau sur le bouton de réception. GPIO4 est GPIO. Il était affiché comme ÉLEVÉ. Cela semble bien fonctionner. キャプチャ035.PNG キャプチャ036.PNG C'est l'état de la base de données une fois qu'il est terminé.

Essayez de bouger

** En créant un mannequin de bibliothèque GPIO, il est possible de déboguer sur Win10 au lieu de RaspberryPi. ** ** Compte tenu de la fonction côté C # cette fois, je pense qu'il suffit de l'exécuter en modifiant le SQL. ** Ce n'est pas un simulateur, c'est un code de test, vous devez donc créer quelque chose qui correspond au mouvement de Pyson **, mais si vous pouvez toujours le juger facile, cela vaut la peine d'essayer. C'est un système de capteurs, et si vous obtenez le journal sur la machine réelle et le mettez dans la table, vous pourrez peut-être essayer le même mouvement que la machine réelle. Vous pouvez le parcourir et vérifier la valeur de la variable en cours d'exécution. Même COREi5 il y a 10 ans n'est pas un ennemi de la série zéro, il est confortable.

J'ai essayé L Chika dans la série zéro juste à cause de l'atmosphère IoT. Vient ensuite. .. ..

Actuellement, il y a deux ennemis puissants sur la maquette. C'est un module de capteur gyroscopique et un circuit intégré de pilote de moteur, mais que va-t-il se passer? Même s'il comporte moins de pièces que le multi-vibrateur instable L Chika.

Plus je lis un livre de logiciels, plus je peux faire, mais pourquoi ce système (de circuits électroniques) est-il inutile (inutile)?

** Pour les challengers de travail électronique de niveau artisanal, le connecteur GPIO est la destination. ** **

Je dois me concentrer sur les adversaires forts sur la maquette de Away, donc je n'ai pas beaucoup de pouvoir pour éviter Python. Car c'est un niveau qui ne peut expliquer le fonctionnement du multi-vibrateur instable.

Recommended Posts

Essayez de déboguer Python sur Raspberry Pi avec Visual Studio.
Travailler avec le GPS en Python pour Raspberry Pi 3
Connectez-vous à MySQL avec Python sur Raspberry Pi
Essayez de tweeter le flux RSS d'arXiv sur Twitter avec python de Raspeye
Débogage à distance avec Visual Studio 2017
Ubuntu 20.04 sur raspberry pi 4 avec OpenCV et utilisation avec python
Utilisez vl53l0x avec RaspberryPi (python)
Essayez d'utiliser ArUco avec Raspberry Pi
Essayez L Chika avec raspberrypi
Essayez de déplacer 3 servos avec Raspeye
Créer Python3 pour Windows 10 sur ARM avec Visual Studio 2019 (x86) sur Windows 10 sur ARM
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Détectez la "luminosité" en utilisant python sur Raspberry Pi 3!
Adafruit Python BluefruitLE fonctionne sur Raspeye.
Essayez de créer un environnement python avec Visual Studio Code et WSL
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Détectez la température à l'aide de python sur Raspberry Pi 3!
Exécutez Python en C ++ sur Visual Studio 2017
Détectez les signaux analogiques avec un convertisseur A / N en utilisant python sur Raspberry Pi 3!
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
Détectez les interrupteurs à glissière à l'aide de python sur Raspberry Pi 3!
Créer un environnement de développement Python avec Visual Studio Code
Essayez d'utiliser le code QR avec Raspberry Pi
Exécutez Python YOLOv3 en C ++ sur Visual Studio 2017
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Détectez les commutateurs magnétiques à l'aide de python sur Raspberry Pi 3!
Profitez du travail électronique avec GPIO de Raspberry Pi
Django avec Python Tools 2.2 pour Visual Studio (PTVS 2.2)
Allumez / éteignez votre PC avec Raspberry Pi
Essayez de travailler avec Mongo en Python sur Mac
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Rendre DHT11 disponible avec Raspeye + python (Remarque)
Sonnez le buzzer en utilisant python sur Raspberry Pi 3!
Construire un environnement de développement Python sur Raspberry Pi
Suivi GPS avec Raspeye 4B + BU-353S4 (Python)
Mesurer la température du processeur de Raspeye avec Python
Essayez de gratter avec Python.
GPGPU avec Raspberry Pi
pigpio sur Raspberry pi
DigitalSignage avec Raspberry Pi
Cython sur Raspberry Pi
Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Exécutez la matrice LED de manière interactive avec Raspberry Pi 3B + sur Slackbot
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
Contrôlez les moteurs sans balais avec GPIO de Raspberry Pi Zero
Environnement de développement Python avec Windows + Anaconda3 + Visual Studio Code
Environnement de développement Python avec Windows + Python + PipEnv + Visual Studio Code
Sortie japonaise lors de l'utilisation de python dans Visual Studio
Installez pyenv sur Raspberry Pi pour gérer Python
Sortie sur "LED 7 segments" en utilisant python avec Raspberry Pi 3!
Résoudre les problèmes liés à l'installation d'OpenCV sur Raspberry Pi et à la capture
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
Exploitons GPIO de Raspeye avec Python CGI