def lose(): global LoseFlag global EndFlag EndFlag = True lcd.setText("You lose!") lcd.setRGB(32, 0, 0) LoseFlag = False
def tempF(): time.sleep(0.5) try: #temperatuur en humindity [temp,hum] = grovepi.dht(temphum,0) if math.isnan(temp)==False and math.isnan(hum)==False: if canEdit==True: lcd.setText("Temp:" + str(temp) + "C\n" + "Hum:" + str(hum) + " %") global isNight isNight=in_between(datetime.datetime.now().time(), datetime.time(23, 0, 0), datetime.time(4, 0, 0)) if isNight==True: lcd.setRGB(0,0,0) else: lcd.setRGB(100,100,100) display_status="" client.publish("temp", temp) client.publish("hum", hum) print('temperatuur: ' + temp) except (IOError,TypeError) as ex: error="Error: " + str(ex)
def win(): global WinFlag global EndFlag EndFlag = True lcd.setText("You win!") lcd.setRGB(0, 32, 0) WinFlag = False
def display(self): global messages global address for message in messages: if not message: message = address grove_rgb_lcd.setText("%s" % message) os.sleep(self.delay)
def shutdown_board(): """Turns off LEDs and clears LCD screen""" grovepi.digitalWrite(RED_LED, OFF) grovepi.digitalWrite(GREEN_LED, OFF) grove_rgb_lcd.setRGB(0, 0, 0) grove_rgb_lcd.setText("") print("Job complete. Have an excellent day.")
def exit(): time.sleep(0.50) grovepi.digitalWrite(led1,0) time.sleep(0.50) grovepi.digitalWrite(led2,0) time.sleep(0.50) grovepi.digitalWrite(led3,0) time.sleep(0.50) grovepi.digitalWrite(buzzer,0) time.sleep(0.50) grovepi.digitalWrite(relay,0) time.sleep(0.50) client.publish("online", 0) client.publish("led1_status", 0) client.publish("led2_status", 0) client.publish("led3_status", 0) client.publish("relay_status", 0) client.publish("display_status", "") lcd.setRGB(100,100,100) lcd.setText("IOT-DEVICE \nSTOPPING") time.sleep(1) lcd.setRGB(0,0,0) lcd.setText("") time.sleep(0.50)
def hello_msg(client, userdata, message): msg = str(message.payload, "utf-8") if msg == "Hello!": print("Received hello message from phone! Printing to LCD...") grovepi lcd_fail = 5 while lcd_fail > 0: try: grove_rgb_lcd.setText(msg) grove_rgb_lcd.setRGB(50, 100, 100) lcd_fail = 0 except: grove_rgb_lcd.textCommand(0x01) time.sleep(0.2) print("lcd write error, retrying...") lcd_fail -= 1 elif msg == "Goodbye!": print("Received goodbye message from phone! Printing to LCD...") lcd_fail = 5 while lcd_fail > 0: try: grove_rgb_lcd.setText(msg) grove_rgb_lcd.setRGB(0, 0, 0) lcd_fail = 0 except: grove_rgb_lcd.textCommand(0x01) time.sleep(0.2) print("lcd write error, retrying...") lcd_fail -= 1 else: print("Invalid message")
def exit(): reset() lcd.setRGB(100, 100, 100) lcd.setText("IOT-DEVICE \nSTOPPING") sleep(0.1) lcd.setRGB(0, 0, 0) lcd.setText("")
def cleanup(): print("Cleanup") try: grovepi.digitalWrite(led, 0) lcd.setRGB(0, 0, 0) lcd.setText("") fobj.close() except: pass
def reset(): global realtimeData for port in ports: digitalWrite(port, 0) sleep(0.1) realtimeData = [] isReading = False lcd.setText("")
def display(in_str, bgcol=(255, 255, 255), in_lcd=use_lcd): print(in_str) try: if in_lcd: lcd.setRGB(bgcol[0], bgcol[1], bgcol[2]) lcd.setText(in_str) except KeyboardInterrupt: sys.exit() except: pass
def write(self, value): self.value = value try: r, g, b = value["rgb"] grove_rgb_lcd.setRGB(r, g, b) except KeyError: pass try: text = value["text"] grove_rgb_lcd.setText(text) except KeyError: pass
def notify(self, data): super(GroveLcdObserver, self).notify(data) txt = [] items = self.latest.items()[self.index : self.index + 4] self.index = 0 if self.index + 4 >= len(self.latest) else self.index + 4 for key, val in items: txt += ['{k}:{v}'.format(k=key.upper(),v=int(val['value']))] if len(txt) > 1: txt = sorted(txt, key=lambda x: len(x)) grove_rgb_lcd.setText(txt[-1] + " " + txt[0] + "\n" + " ".join(txt[1:-1])) else: grove_rgb_lcd.setText(txt[0]) rgb = self.get_level_color(self.get_highest_level(self.latest)) grove_rgb_lcd.setRGB(*rgb)
def lcd_write_lines(line_1, line_2, line_3, line_4): msg = "" if line_1: msg += line_1 msg += "\n" if line_2: msg += line_2 msg += "\n" if line_3: msg += line_3 msg += "\n" if line_4: msg += line_4 setText(msg)
def set_display(settings): try: if settings['display_mode'] == 'post': # sets color on monitor if settings['color'] == 'red': grove_rgb_lcd.setRGB(255, 0, 0) elif settings['color'] == 'green': grove_rgb_lcd.setRGB(0, 255, 0) elif settings['color'] == 'blue': grove_rgb_lcd.setRGB(0,0, 255) # prints out message on display monitor grove_rgb_lcd.setText(settings['message']) except ValueError: return "Not found"
def set_display(settings): try: if settings['display_mode'] == 'post': # sets color on monitor if settings['color'] == 'red': grove_rgb_lcd.setRGB(255, 0, 0) elif settings['color'] == 'green': grove_rgb_lcd.setRGB(0, 255, 0) elif settings['color'] == 'blue': grove_rgb_lcd.setRGB(0, 0, 255) # prints out message on display monitor grove_rgb_lcd.setText(settings['message']) except ValueError: return "Not found"
def lcdcallback(client,userdata,msg): freq = int(str(msg.payload, "utf-8")) while True: buttonpress = grovepi.digitalRead(button) if(buttonpress): print("buttonpressed") for i in tones: #if(note_produced == tones[i]): #if(freq - 20 < tones[i] < freq + 20): if(abs(freq - tones[i]) <= 20): grove_rgb_lcd.setText(i) break client.subscribe("theduo/defaultCallback")
def init(): lcd.setRGB(0,0,0) lcd.setText("IOT-DEVICE \nBOOTING") time.sleep(5) lcd.setRGB(100,100,100) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("gmail.com",80)) text=str(s.getsockname()[0]) s.close() while True: lcd.setText("IP: " +str(text)) time.sleep(0.2)
def main(file): print("Importing {}".format(file)) audio = AudioSegment.from_mp3(file) sample_count = audio.frame_count() sample_rate = audio.frame_rate samples = audio.get_array_of_samples() print("Number of channels: " + str(audio.channels)) print("Sample count: " + str(sample_count)) print("Sample rate: " + str(sample_rate)) print("Sample width: " + str(audio.sample_width)) period = 1 / sample_rate #the period of each sample duration = sample_count / sample_rate #length of full audio in seconds slice_sample_size = int( SLICE_SIZE * sample_rate ) #get the number of elements expected for [SLICE_SIZE] seconds n = slice_sample_size #n is the number of elements in the slice #generating the frequency spectrum k = np.arange(n) #k is an array from 0 to [n] with a step of 1 slice_duration = n / sample_rate #slice_duration is the length of time the sample slice is (seconds) frq = k / slice_duration #generate the frequencies by dividing every element of k by slice_duration #max_frq_idx = int(MAX_FRQ*slice_duration) #get the index of the maximum frequency (2000) frq = frq[range( 5000)] #truncate the frequency array so it goes from 0 to 5000 Hz note_produced = int(statistics.mean(frq)) print(note_produced) #grovepi.pinMode(buzzer,"OUTPUT") while True: buttonpress = grovepi.digitalRead(button) if (buttonpress): print("buttonpressed") for i in tones: if (note_produced == tones[i]): grove_rgb_lcd.setText(i) break
def index(): try: if request.method == "POST": print("Command received") # captures inputted message and clicked color on web page message = request.form['message'] color = request.form['color'] # takes user's info to print out message and color on screen if message == '': return "No message entered" elif color == 'red': grove_rgb_lcd.setRGB(255, 0, 0) grove_rgb_lcd.setText(message) elif color == 'green': grove_rgb_lcd.setRGB(0, 255, 0) grove_rgb_lcd.setText(message) elif color == 'blue': grove_rgb_lcd.setRGB(0, 0, 255) grove_rgb_lcd.setText(message) print("Command processed") return render_template('monitor.html') elif request.method == "GET": return render_template('monitor.html') except ValueError: return "Not found"
def init(): global started global client client.on_connect = on_connect client.on_message = on_message client.connect_async("raspberrypi.local", 1883, 60) client.loop_start() # INIT time.sleep(0.50) grovepi.digitalWrite(led1,0) time.sleep(0.50) grovepi.digitalWrite(led2,0) time.sleep(0.50) grovepi.digitalWrite(led3,0) time.sleep(0.50) grovepi.digitalWrite(buzzer,0) time.sleep(0.50) grovepi.digitalWrite(relay,0) time.sleep(0.50) client.publish("led1_status", 0) client.publish("led2_status", 0) client.publish("led3_status", 0) client.publish("relay_status", 0) client.publish("display_status", "") client.publish("online", 1) time.sleep(2) lcd.setRGB(0,0,0) lcd.setText("IOT-DEVICE \nSTARTING") time.sleep(1) lcd.setRGB(100,100,100) lcd.setText("LOADING ... ") print("\n\nIOT is online\n\n") started=True
def motion(): time.sleep(0.22) try: if grovepi.digitalRead(pir_sensor): global canEdit if canEdit==True: lcd.setText("Welkom thuis") global isNight isNight if isNight==True: lcd.setRGB(0,0,0) else: lcd.setRGB(100,100,100) display_status="" client.publish("motion", 1) #time.sleep(5) else: client.publish("motion", 0) except (IOError,TypeError) as ex: error="Error: " + str(ex) print(error)
def init(): global started global client lcd.setRGB(0, 0, 0) lcd.setText("IOT-DEVICE \nSTARTING") client.on_connect = on_connect client.on_message = on_message client.connect_async(MQTT_BROKER, 1883, 60) client.loop_start() # INIT reset() client.publish("online", makeJsonOnlineObject('Box')) sleep(0.1) lcd.setRGB(100, 100, 100) lcd.setText("LOADING ... ") lcd.setText("") started = True
#!/usr/bin/env python import time from grovepi import pinMode, digitalRead from grove_rgb_lcd import setText, setRGB # Connect the Grove Button to digital port D3 # SIG,NC,VCC,GND button = 3 pinMode(button, "INPUT") setText("READY") setRGB(0, 0, 255) while True: try: state = digitalRead(button) except IOError: print("Button Error") time.sleep(.1) if state == 1: print("button pushed") break setText("Done!") setRGB(0, 255, 0)
# 3-axis digital accelerometer 16g at address 53 from adxl345 import ADXL345 adxl345 = ADXL345() print("ADXL345 on address 0x%x:" % (adxl345.address)) # Shock sensor import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) SHOCK_PIN = 17 GPIO.setup(SHOCK_PIN, GPIO.IN) from netifaces import interfaces, ifaddresses, AF_INET address = ifaddresses('wlan0').setdefault(AF_INET, [{'addr':'No IP addr'}])[0]['addr'] import grove_rgb_lcd grove_rgb_lcd.setText("%s" % address) print("%s Sensors starting up" % datetime.datetime.now().isoformat()) while True: try: # Read the sound level loudness = grovepi.analogRead(loudness_sensor) #if debug: print("loudness sensor value =", loudness) # Get accelerometer values if False: # disable because always returns 0 acc=acc_mag.getRealAccel() # Read the heading (6-axis accelerometer/gyro) heading= acc_mag.getHeading() if debug: print("Acceleration of X,Y,Z is %.3fg, %.3fg, %.3fg" %(acc[0],acc[1],acc[2])) if debug: print("Heading %.3f degrees\n" %(heading))
def lcd_write_str(value): #print "Write string: " #print value grove_rgb_lcd.setRGB(0, 255, 0) grove_rgb_lcd.setText(value) return 0
client.on_message = on_message client.on_connect = on_connect client.connect(host="eclipse.usc.edu", port=11000, keepalive=60) client.loop_start() #initiate ports button = 2 ultrasonic_ranger = 3 led = 4 grovepi.pinMode(button, "INPUT") #splashscreen with lock: grove_rgb_lcd.setRGB(255, 255, 255) grove_rgb_lcd.setText("Tim & Andrew\nEE 250") time.sleep(2) grove_rgb_lcd.setText("") while True: with lock: rangervalue = grovepi.ultrasonicRead( ultrasonic_ranger) #check ranger reading client.publish("timandrew/ultrasonicRanger", rangervalue) #publish value to ultrasonicRanger topic with lock: buttonvalue = grovepi.digitalRead(button) #check button reading if buttonvalue: client.publish( "timandrew/button", "Button pressed!" ) #if button is pressed, publish string to button topic
def readTH(): temp = float("nan") humid = float("nan") while (math.isnan(temp) or math.isnan(humid)): try: [temp,humid]=g.dht(7,0) except: print(time.ctime(t)) print(traceback.format_exc()) return [temp, humid] while True: try: [temp, humid] = readTH() t = time.time() s = time.localtime(t) w = Weather("Neuilly-Plaisance", "fr") w.update(t) w.bulletin[u"home"] = {u"temp": temp, u"humidity": humid} w.bulletin[u"time"] = props(s) setColor(s, w, temp, humid) l.setText("Ext: {:s}C {:s}%\nInt: {:s}C {:s}%".format( \ *repl0((w.m["temp"], w.m["humidity"], temp, humid)))) logAll(t, w, temp, humid) except: print(time.ctime(t)) print(traceback.format_exc()) time.sleep(60)
"temperature": tempc, "humidity": hum, "range": ranger, "degrees": degrees } } #local_client.publish('SNHU/IT697/sensor/data/json', json.dumps(publish_data)) local_client.publish('SNHU/IT697/sensor/data/' + uuid, json.dumps(publish_data)) # remote_client.publish('SNHU/IT697/jeffrey_cutter_snhu_edu/sensor/data/json', json.dumps(publish_data)) # Delay between updates. time.sleep(10) # Keep line spacing consistent in debug mode. if debug: print except KeyboardInterrupt as e: if debug: print type(e) finally: print "Turning display off" grove_rgb_lcd.setText('') grove_rgb_lcd.setRGB(0, 0, 0) print "Turning LEDs off" grovepi.analogWrite(RED_LED, 0) grovepi.analogWrite(GREEN_LED, 0) grovepi.analogWrite(BLUE_LED, 0)
is, if you run `python3 grovepi_sensors.py` in terminal, this if-statement will be true""" t = grove_i2c_temp_hum_mini.th02() t.getTemperature = protect(t.getTemperature) t.getHumidity = protect(t.getHumidity) if __name__ == '__main__': PORT = 4 # D4 PORTR = 0 PORTW = 1 ldis = -1 lsen = -1 while True: #So we do not poll the sensors too quickly which may introduce noise, #sleep for a reasonable time of 200ms between each iteration. time.sleep(0.8) #try: temp = t.getTemperature() humid = t.getHumidity() #except TypeError: # print ("Error") time.sleep(0.1) grove_rgb_lcd.setText(" " + str(temp) + "cm \n " + str(humid) + "cm") grove_rgb_lcd.setRGB(0, 255, 0) buf = list("Grove -Update without erase") grove_rgb_lcd.setText("".join(buf)) for i in range(len(buf)): buf[i] = "." grove_rgb_lcd.setText_norefresh("".join(buf)) time.sleep(.1)
def display(self): grove_rgb_lcd.setText(self.memory)
print "humidity:", humidity elif msg[:8].lower() == "distance".lower(): if en_grovepi: port = int(msg[8:]) dist = grovepi.ultrasonicRead(port) s.sensorupdate({'distance': dist}) if en_debug: print msg print "distance=", dist elif msg[:3].lower() == "lcd".lower(): if en_grovepi: import grove_rgb_lcd grove_rgb_lcd.setRGB(0, 128, 0) grove_rgb_lcd.setText(msg[3:]) if en_debug: print msg elif msg[:10].lower() == "setOutput".lower(): if en_grovepi: port = int(msg[10:]) a_read = grovepi.analogRead(port) s.sensorupdate({'analogRead': a_read}) if en_debug: print msg print "Analog Reading: " + str(a_read) elif msg.lower() == "READ_IR".lower(): print "READ_IR!" if en_ir_sensor == 0: import lirc
def display(word): grove_rgb_lcd.setText(word) grove_rgb_lcd.setRGB(250, 128, 114)
# DHT2301 3 # read ultrasonic grovepi.ultrasonicRead(4) import grove_rgb_lcd as lcd # set background to red, green and blue lcd.setRGB(200, 0, 0) time.sleep(1) lcd.setRGB(0, 200, 0) time.sleep(1) lcd.setRGB(0, 0, 200) time.sleep(1) # write text to RGB lcd.setText('Hello There') time.sleep(1) lcd.setRGB(255, 113, 181) time.sleep(1) def ReadDHTandText(dhtport=7): [t, h] = grovepi.dht(dhtport, 0) msg = f'temp: {t}C\nhumidity: {h}%' print(msg) lcd.setText_norefresh(msg) def FadeLed(pin=5): # set pin mode to output grovepi.pinMode(pin, 'OUTPUT')
def lcdCallBack(client, userdata, message): grove_rgb_lcd.setText(str(message.payload, "utf-8"))
def shutdown(): lcd.setText('') lcd.setRGB(0, 0, 0)
print "humidity:",humidity elif msg[:8].lower()=="distance".lower(): if en_grovepi: port=int(msg[8:]) dist=grovepi.ultrasonicRead(port) s.sensorupdate({'distance':dist}) if en_debug: print msg print "distance=",dist elif msg[:3].lower()=="lcd".lower(): if en_grovepi: import grove_rgb_lcd grove_rgb_lcd.setRGB(0,128,0) grove_rgb_lcd.setText(msg[3:]) if en_debug: print msg elif msg[:10].lower()=="setOutput".lower(): if en_grovepi: port=int(msg[10:]) a_read=grovepi.analogRead(port) s.sensorupdate({'analogRead':a_read}) if en_debug: print msg print "Analog Reading: " + str(a_read) else: if en_debug: print "m",msg
def on_message(client, userdata, msg): global led1_status global led2_status global led3_status global relay_status global display_status #print(msg.topic+" "+str(msg.payload)) if msg.topic=="load_status": if str(msg.payload)=="true": print('led1:' + str(led1_status)) print('led2:' + str(led2_status)) print('led3:' + str(led3_status)) client.publish("led1_status", getStatusBool(led1_status)) client.publish("led2_status", getStatusBool(led2_status)) client.publish("led3_status", getStatusBool(led3_status)) client.publish("relay_status", getStatusBool(led3_status)) client.publish("display_status", display_status) if msg.topic=="led1": ok=grovepi.digitalRead(led1) time.sleep(1.5) if str(msg.payload)=="true" : if str(ok)=="0": grovepi.digitalWrite(led1,1) if str(ok)=="1": grovepi.digitalWrite(led1,1) else: grovepi.digitalWrite(led1,1) time.sleep(0.5) client.publish("led1_status", 1) led1_status=True if str(msg.payload)=="false": if str(ok)=="0": grovepi.digitalWrite(led1,0) if str(ok)=="1": grovepi.digitalWrite(led1,0) else: grovepi.digitalWrite(led1,0) time.sleep(0.8) client.publish("led1_status", 0) led1_status=False if msg.topic=="led2": ok=grovepi.digitalRead(led2) time.sleep(1.5) if str(msg.payload)=="true": if str(ok)=="0": grovepi.digitalWrite(led2,1) if str(ok)=="1": grovepi.digitalWrite(led2,1) else: grovepi.digitalWrite(led2,1) time.sleep(0.5) client.publish("led2_status", 1) led2_status=True if str(msg.payload)=="false": if str(ok)=="0": grovepi.digitalWrite(led2,0) if str(ok)=="1": grovepi.digitalWrite(led2,0) else: grovepi.digitalWrite(led2,0) time.sleep(0.8) client.publish("led2_status", 0) led2_status=False if msg.topic=="led3": ok=grovepi.digitalRead(led3) time.sleep(1.5) if str(msg.payload)=="true": if str(ok)=="0": grovepi.digitalWrite(led3,1) if str(ok)=="1": grovepi.digitalWrite(led3,1) else: grovepi.digitalWrite(led3,1) time.sleep(0.8) client.publish("led3_status", 1) led3_status=True if str(msg.payload)=="false": if str(ok)=="0": grovepi.digitalWrite(led3,0) if str(ok)=="1": grovepi.digitalWrite(led3,0) else: grovepi.digitalWrite(led3,0) time.sleep(0.8) client.publish("led3_status", 0) led3_status=False if msg.topic=="display": if str(msg.payload)=="": global canEdit canEdit=True else: global canEdit canEdit=False lcd.setText(str(msg.payload)) display_status=str(msg.payload) client.publish("display_status", str(msg.payload)) time.sleep(0.5) if msg.topic=="relay": ok=grovepi.digitalRead(relay) time.sleep(1.5) if str(msg.payload)=="true": if str(ok)=="0": grovepi.digitalWrite(relay,1) if str(ok)=="1": grovepi.digitalWrite(relay,1) else: grovepi.digitalWrite(relay,1) time.sleep(0.8) client.publish("relay_status", 1) relay_status=True
def _print(self, string): self.memory = str(string) grove_rgb_lcd.setText(self.toString(string))
def clear(self): self.memory = "" grove_rgb_lcd.setText("")
if __name__ == '__main__': #LED on D4 port LED = 4 grovepi.pinMode(LED,"OUTPUT") #ultrasonic on D3 port ultrasonic_ranger = 3 #button on D2 port button = 2 grovepi.pinMode(button,"INPUT") #button_test = 1 # for testing purposes #clear screen grove_rgb_lcd.setText("") #this section is covered in publisher_and_subscriber_example.py client = mqtt.Client() client.led_callback = led_callback client.lcd_callback = lcd_callback client.on_connect = on_connect client.connect(host="eclipse.usc.edu", port=11000, keepalive=60) client.loop_start() while True: # publish ultrasonic ranger distance #dist_int = 0 #for testing purposes w/o grovepi dist_int = grovepi.ultrasonicRead(ultrasonic_ranger) client.publish("tinabao/ultrasonicCallback", dist_int)
def noDisplay(self): grove_rgb_lcd.setText("")
if en_grovepi: if en_debug: print msg[:3], msg[3:6], msg[6:] import grove_rgb_lcd if msg[3:6].lower() == "col".lower(): rgb = [] for i in range(0, 6, 2): rgb.append(int( msg[6:][i:i + 2], 16)) # convert from one hex string to three ints if en_debug: print "colours are:", rgb[0], rgb[1], rgb[2] grove_rgb_lcd.setRGB(rgb[0], rgb[1], rgb[2]) elif msg[3:6].lower() == "txt".lower(): txt = msg[6:] grove_rgb_lcd.setText(txt) else: pass if en_debug: print msg elif msg[:10].lower() == "setOutput".lower(): if en_grovepi: port = int(msg[10:]) a_read = grovepi.analogRead(port) s.sensorupdate({'analogRead': a_read}) if en_debug: print msg print "Analog Reading: " + str(a_read) elif msg.lower() == "READ_IR".lower(): print "READ_IR!"
elif msg[:3].lower()=="lcd".lower(): if en_grovepi: if en_debug: print msg[:3], msg[3:6],msg[6:] import grove_rgb_lcd if msg[3:6].lower() == "col".lower(): rgb = [] for i in range(0,6,2): rgb.append(int(msg[6:][i:i+2],16)) # convert from one hex string to three ints if en_debug: print "colours are:",rgb[0],rgb[1],rgb[2] grove_rgb_lcd.setRGB(rgb[0],rgb[1],rgb[2]) elif msg[3:6].lower() == "txt".lower(): txt = msg[6:] grove_rgb_lcd.setText(txt) else: pass if en_debug: print msg elif msg[:10].lower()=="setOutput".lower(): if en_grovepi: port=int(msg[10:]) a_read=grovepi.analogRead(port) s.sensorupdate({'analogRead':a_read}) if en_debug: print msg print "Analog Reading: " + str(a_read) elif msg.lower()=="READ_IR".lower(): print "READ_IR!"
import grove_rgb_lcd from netifaces import interfaces, ifaddresses, AF_INET address = ifaddresses('wlan0').setdefault(AF_INET, [{'addr':'No IP addr'}])[0]['addr'] #print("%s Sensors starting up" % datetime.datetime.now().isoformat()) grove_rgb_lcd.setText("%s" % address) messages = [] class displayThread(threading.Thread): def __init__(self, threadID, name, delay=1): threading.Thread.__init__(self) self.threadID = threadID self.name = name self.delay = delay def run(self): print "Starting " + self.name # Get lock to synchronize threads threadLock.acquire() self.display() # Free lock to release next thread threadLock.release() def display(self): global messages global address for message in messages: if not message: message = address grove_rgb_lcd.setText("%s" % message) os.sleep(self.delay)