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?
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.
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.
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. ** **
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.
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
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 #. ** **
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)
);
Sélectionnez Python. Si vous ne le trouvez pas, vous devez l'installer. C'est fait. Ouvrez la gestion des packages Python. Entrez psycopg2. Celui avec la flèche vers le haut semble être une mise à jour, donc je pense qu'il devrait être mis à jour. Cela a été varié. Au début, cliquez sur Exécuter la commande suivante. Cliquez sur Promouvoir maintenant. C'est fait. Il a été ajouté à la liste. 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')
Ajoutez un nouvel élément. Créez un package Python. Le nom est important. C'est fait. 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. Créez un fichier Physon vide. Le nom est important. Il a été ajouté à la liste. 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.
Il n'y a pas d'erreur d'importation. Je suis heureux.
Faites-le avec le formulaire Windows. C'est fait. NuGet. Sélectionnez la référence et recherchez Npgskl. Installez-le. Il a été ajouté aux paramètres de référence. Faites un formulaire. 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.
Pour nettoyer la table, utilisez truncate. Il initialise également la valeur id.
truncate table inputtable RESTART IDENTITY;
truncate table outputtable RESTART IDENTITY;
Lancez deux Visual Studios et exécutez respectivement Pyson et C #. J'ai commencé Python. J'ai commencé C #. 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. 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. Appuyez à nouveau sur le bouton de réception. GPIO4 est GPIO. Il était affiché comme ÉLEVÉ. Cela semble bien fonctionner. C'est l'état de la base de données une fois qu'il est terminé.
** 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.