Python Irc en arduino.

Python i.c.m. Arduino
Gebruikers-avatar
Berichten: 188
Geregistreerd: 23 Dec 2011, 00:12

Python Irc en arduino.

Berichtdoor Duality » 22 Apr 2012, 14:56

Hallo,
Ik wil graag dit delen met mensen die ook bezig zijn met python en arduino,
Ik ben recent bezig geweest in python, en dacht ik kan wel een scriptje schrijven,
die irc msg's op een lcd dumpt, van het een kwam het ander en hier is het:

wat ik doe hier in Python is een serieele poort openen met:
Code: Alles selecteren
ser = serial.Serial(str(raw_input("enter device for example: /dev/xx: ")), int(raw_input("and baud: ")))

(wat eigenlijk gewoon dit is: )
ser = serial.Serial(port, baud)


en dit is zeer makkelijk in python, wat raw_input(); doet is vragen naar je input, wat tussen() staat word neergezet in de terminal(een soort van prompt dus).
en ser returned(geeft terug) strings ,je kan in python alles wat ser dan geeft als strings behandelen easy.
bijv lezen: ser.readline()
Wat dan ook mogelijk is om naar ser te schrijven.
ofcourse, moet je import serial doen :)
en als je vervolgens iets wil verzenden naar de arduino dan doe je:
Code: Alles selecteren
ser.write(str(disp))


de rest van de code is infeite gewoon een irc client, die data naar de arduino stuurt,
bovendien kan deze code ook data naar irc sturen, door middel van sendmsg();
en het grappige is dat ik een stukje code geschreven heb dat als een klein botje fungeert:
Code: Alles selecteren
if ircmsg.find("privmsg "+nick.lower()) != -1:
      if ircmsg.find("quit")!= -1:
         exit()
      if ircmsg.find("master") != -1:
         sendmsg(channel, "Hello there! Duality is my Master, whom I serve with whole my Heart.");
      if ircmsg.find("say name") != -1:
         sendmsg(channel, "Hello all! my name is Artie.");
      else:
         print ircmsg


Deze commando's werken alleen in een Pm, (de commands zijn quit, master, say name)
Het is heel simpel om zelf dan ook nog wat commando's toe tevoegen Want je kan het ook zo zien:
Code: Alles selecteren
if ircmsg.find(commando)!= -1:
   doedan()



alles wat hier gebeurt is wat string operaties, waarbij ik check of er ipv6 of ipv4 in de data zit,
dit was een probleem waarbij ipv6 : als scheidings tekens gebruikte waar door data die
je niet echt nodig heb (van het irc protocol etc) door gestuurd werd.

Code: Alles selecteren
disp = irc()
   if disp != None:
      disp = disp.split(' ')
      for l in xrange(len(disp)):
         if disp[l] == "privmsg":
            disp = disp[l:len(disp)][2:]
            disp = ' '.join(disp)
            disp = disp[1:]
            break
      print ">> displayed >>: ",disp
      ser.write(str(disp))
      time.sleep(2)

En dit is hoe de geheele code er dan uit komt tezien:
Code: Alles selecteren
import serial
import socket
import time
#import sys
ser = serial.Serial(str(raw_input("enter device for example: /dev/xx: ")), int(raw_input("and baud: ")))

server = "irc.freenode.net"
channel = raw_input("Enter channel: ")
#channel = "#test1123"
nick = "ADuaD"
ircsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ircDone = False

def ping():
   ircsock.send("PONG :Pong\n")
   
def sendmsg(chan, msg):
   ircsock.send("PRIVMSG "+chan+" :"+msg+"\n")

def joinchan(chan):
   ircsock.send("JOIN "+chan+"\n")

def connectIrc():
   ircsock.connect((server, 6667))
   ircsock.send("USER "+nick+" "+nick+" "+nick+" :Arduino Irc Thingy\n")
   ircsock.send("NICK "+nick+"\n")
   joinchan(channel)

def irc():
   ircmsg = ircsock.recv(2048)
   ircmsg = ircmsg.strip('\n\r')
   ircmsg = str(ircmsg).lower()
   if ircmsg.find("ping :") != -1:
      ping()
   print nick+" >> "+ircmsg
   if ircmsg.find("privmsg "+nick.lower()) != -1:
      if ircmsg.find("quit")!= -1:
         exit()
      if ircmsg.find("master") != -1:
         sendmsg(channel, "Hello there! Duality is my Master, whom I serve with whole my Heart.");
      if ircmsg.find("say name") != -1:
         sendmsg(channel, "Hello all! my name is Artie.");
      else:
         print ircmsg
   if ircmsg.find("privmsg "+channel.lower()) != -1:
      return ircmsg

connectIrc()

while True:
   disp = irc()
   if disp != None:
      disp = disp.split(' ')
      for l in xrange(len(disp)):
         if disp[l] == "privmsg":
            disp = disp[l:len(disp)][2:]
            disp = ' '.join(disp)
            disp = disp[1:]
            break
      print ">> displayed >>: ",disp
      ser.write(str(disp))
      time.sleep(2)

Advertisement

Gebruikers-avatar
Berichten: 188
Geregistreerd: 23 Dec 2011, 00:12

Re: Python Irc en arduino.

Berichtdoor Duality » 22 Apr 2012, 15:10

Ik hoop dat iemand er hier wat baat bij heeft :)

little side note: een van de redenen was dat ik geen ethernetshield had(nog steeds niet heb) om een irc client/botje te schrijven voor arduino, maar ik was al langer met python bezig heb dit dus ook een beetje gedaan om te oefenen.

Als er nog vragen zijn, wil ik graag helpen :)

Groet,
Duality

Terug naar Python

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast