2016-12-01 119 views
0

我已經做了一個按鈕/開關電路的程序,將顯示它輸出使用wxPython但我想發送數據到服務器。如何從python樹莓派發送數據到mssql服務器?

這是按鈕的程序:

import RPi.GPIO as GPIO 
import datetime 
import os 

GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(40, GPIO.IN) 

global count, flag 
count = 0 
flag = 0 
button = "None" 
input = GPIO.input(40) 

global update_time 
update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y  %H:%M:%S') 

try: 
    import wx 
except ImportError: 
    raise ImportError, "The wxPython module is required to run this program." 

class OnOffApp_wx(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, size = (500, 200), title = 'ON/OFF Status') 
     self.SetBackgroundColour(wx.WHITE) 
     self.SetWindowStyle(wx.STAY_ON_TOP) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     sizer = wx.GridBagSizer() 
     font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL) 
     self.SetFont(font) 

     self.label1 = wx.StaticText(self, -1, label=u'Button Status : {}'.format(button)) 
     self.label1.SetBackgroundColour(wx.WHITE) 
     self.label1.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label1, (1,0), (1,2), wx.EXPAND) 

     self.label2 = wx.StaticText(self, -1, label=u'Flag Status : {}'.format(flag)) 
     self.label2.SetBackgroundColour(wx.WHITE) 
     self.label2.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label2, (2,0), (1,3), wx.EXPAND) 

     self.label3 = wx.StaticText(self, -1, label=u'Count Status : {}'.format(count)) 
     self.label3.SetBackgroundColour(wx.WHITE) 
     self.label3.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label3, (3,0), (1,4), wx.EXPAND) 

     self.label4 = wx.StaticText(self, -1, label=u'Time Updated : {}'.format(update_time)) 
     self.label4.SetBackgroundColour(wx.WHITE) 
     self.label4.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label4, (4,0), (1,5), wx.EXPAND) 

     self.timer = wx.Timer(self) 
     self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) 
     self.timer.Start(50) 

     self.SetSizer(sizer) 
     self.Show(True) 

    def on_timer(self,event): 
     global update_time 
     update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y %H:%M:%S') 

     global count, flag         
     input = GPIO.input(40) 
     if ((not flag) and input): 
      flag = input 
      count += 1 
      button = 'Pressed' 
      #self.label1.SetLabel("Button Status : Pressed") 
      self.label1.SetLabel("Button Status : {}".format(button)) 
      self.label2.SetLabel("Flag Status : {}".format(flag)) 
      self.label3.SetLabel("Count Status : {}".format(count)) 
      self.label4.SetLabel("Time Updated : {}".format(update_time)) 

     elif ((not input) and flag): 
      flag = input 
      count += 1 
      button = 'Debounce' 
      #self.label1.SetLabel("Button Status : Debounce") 
      self.label1.SetLabel("Button Status : {}".format(button)) 
      self.label2.SetLabel("Flag Status : {}".format(flag)) 
      self.label3.SetLabel("Count Status : {}".format(count)) 
      self.label4.SetLabel("Time Updated : {}".format(update_time)) 

if __name__ == "__main__": 
    Rs = wx.App() 
    OnOffApp_wx(None, -1, 'ON/OFF Status') 
    Rs.MainLoop() 

GPIO.cleanup() 

在Python這是我的SQL實例連接,我從這個2網站,該網站是遵循https://tryolabs.com/blog/2012/06/25/connecting-sql-server-database-python-under-ubuntu/https://gist.github.com/rduplain/1293636

import pyodbc 

dsn = 'datasource' 
user = 'username' 
password = 'password' 
database = 'databasename' 

con_string = 'DSN=%s; UID=%s; PWD=%s; DATABASE=%s;' % (dsn, user, password, database) 
cnxn = pyodbc.connect(con_string) 

我不能給你我的數據庫信息,但任何人都可以顯示如何從我的按鈕切換程序發送數據到mssql數據庫,因爲我已成功連接到我的服務器和數據庫。

+0

那麼最新的問題?您已經連接,數據發送是否有問題,或者您不知道如何發送數據?如果是後者,請參閱[這裏](https://mkleehammer.github.io/pyodbc/) –

+0

我不知道如何發送它,因爲我還沒有完成它。 – anubismmt

+0

我只想將標誌和計數數據發送到數據庫中的表中,以供入門者使用。 – anubismmt

回答

0

這裏我全成代碼,它可以將數據發送到服務器,除了它我的孫中山像UPDATE_TIME 2016年1月12日,但是當我使用選擇查看在MSSQL服務器中的數據顯示其1月12日2016年

日期時間
import RPi.GPIO as GPIO 
import datetime 
import os 
import pyodbc 

dsn = 'sqlserverdatasource' 
driver = 'FreeTDS' 
user = 'username' 
password = 'password' 
database = 'databasename' 

con_string = 'DSN=%s; DRIVER=%s; UID=%s; PWD=%s; DATABASE=%s;' % (dsn, driver, user, password, database) 
cnxn = pyodbc.connect(con_string) 
global cursor 
cursor = cnxn.cursor() 

GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(40, GPIO.IN) 

global count, flag 
count = 0 
flag = 0 
button = "None" 
input = GPIO.input(40) 

global update_time 
update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y  %H:%M:%S') 

try: 
    import wx 
except ImportError: 
    raise ImportError, "The wxPython module is required to run this program." 

class OnOffApp_wx(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, size = (500, 200), title = 'ON/OFF Status') 
     self.SetBackgroundColour(wx.WHITE) 
     self.SetWindowStyle(wx.STAY_ON_TOP) 
     self.parent = parent 
     self.initialize() 

    def initialize(self): 
     sizer = wx.GridBagSizer() 
     font = wx.Font(20, wx.DECORATIVE, wx.ITALIC, wx.NORMAL) 
     self.SetFont(font) 

     self.label1 = wx.StaticText(self, -1, label=u'Button Status : {}'.format(button)) 
     self.label1.SetBackgroundColour(wx.WHITE) 
     self.label1.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label1, (1,0), (1,2), wx.EXPAND) 

     self.label2 = wx.StaticText(self, -1, label=u'Flag Status : {}'.format(flag)) 
     self.label2.SetBackgroundColour(wx.WHITE) 
     self.label2.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label2, (2,0), (1,3), wx.EXPAND) 

     self.label3 = wx.StaticText(self, -1, label=u'Count Status : {}'.format(count)) 
     self.label3.SetBackgroundColour(wx.WHITE) 
     self.label3.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label3, (3,0), (1,4), wx.EXPAND) 

     self.label4 = wx.StaticText(self, -1, label=u'Time Updated : {}'.format(update_time)) 
     self.label4.SetBackgroundColour(wx.WHITE) 
     self.label4.SetForegroundColour(wx.BLACK) 
     sizer.Add(self.label4, (4,0), (1,5), wx.EXPAND) 

     self.timer = wx.Timer(self) 
     self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) 
     self.timer.Start(50) 

     self.SetSizer(sizer) 
     self.Show(True) 

    def on_timer(self,event): 
     global update_time 
     update_time = datetime.datetime.strftime(datetime.datetime.now(), '%d-%m-%y %H:%M:%S') 

     global count, flag         
     input = GPIO.input(40) 
     cursor = cnxn.cursor() 

     if ((not flag) and input): 
      flag = input 
      count += 1 
      button = 'Pressed' 
      #self.label1.SetLabel("Button Status : Pressed") 
      self.label1.SetLabel("Button Status : {}".format(button)) 
      self.label2.SetLabel("Flag Status : {}".format(flag)) 
      self.label3.SetLabel("Count Status : {}".format(count)) 
      self.label4.SetLabel("Time Updated : {}".format(update_time)) 
      #cursor.execute("INSERT INTO TableTest (Col1, Col2, Col3) VALUES(%s,%s)"%(int(flag),int(count))) 
      cursor.execute("INSERT INTO TableTest (Col1, Col2, Col3) VALUES(%s,%s,'%s')"%(int(flag),int(count),update_time)) 
      cnxn.commit() 

     elif ((not input) and flag): 
      flag = input 
      count += 1 
      button = 'Debounce' 
      #self.label1.SetLabel("Button Status : Debounce") 
      self.label1.SetLabel("Button Status : {}".format(button)) 
      self.label2.SetLabel("Flag Status : {}".format(flag)) 
      self.label3.SetLabel("Count Status : {}".format(count)) 
      self.label4.SetLabel("Time Updated : {}".format(update_time)) 
      #cursor.execute("INSERT INTO TableTest (Col1, Col2, Col3) VALUES(%s,%s)"%(int(flag),int(count))) 
      cursor.execute("INSERT INTO TableTest (Col1, Col2, Col3) VALUES(%s,%s,'%s')"%(int(flag),int(count),update_time)) 
      cnxn.commit() 

if __name__ == "__main__": 
    Rs = wx.App() 
    OnOffApp_wx(None, -1, 'ON/OFF Status') 
    Rs.MainLoop() 

GPIO.cleanup() 
cursor.close() 
cnxn.close() 
+0

現在任何人都可以幫助創建和顯示數據從服務器使用select語句通過添加按鈕和輸出顯示在消息框 – anubismmt

+0

或者如果nybody有另一種選擇請告訴我... – anubismmt