Luigi Francesco Cerfeda
Published © GPL3+

Control Adafruit NeoPixels using Python and JQWidgets

In this tutorial, we'll see how to control an Adafruit NeoPixel ring via mobile using Python and JQWidgets.

BeginnerFull instructions provided1 hour3,059

Things used in this project

Story

Read more

Schematics

Basic connections

Neopixel +5V to Vin pin of the Particle Photon
Neopixel GND to GND pin of the Particle Photon
Neopixel “Data In” pin to a digital pin of the Particle Photon

Code

Code snippet #1

Python
# Neopixel via Zerynth App
 
from wireless import wifi
# change the following line to use a different wifi driver
from broadcom.bcm43362 import bcm43362 as wifi_driver
 
from zerynthapp import zerynthapp
 
from adafruit.neopixel import ledstrips as neo
 
import streams
 
streams.serial()
 
num_leds = 16                     # adjust this to match the number of LEDs on your strip
led_pin = A5                      # this should match the data pin of the LED strip
 
leds = neo.LedStrip(led_pin, num_leds) # create a new Neopixel strip composed of  LEDs and connected to pin led_pin
 
leds.clear()
r = 72
g = 108
b = 108
leds.setall(r, g, b) 
 
sleep(1000)
print("STARTING...")
 
try:
    # Device UID and TOKEN can be created in the ADM panel
    zapp = zerynthapp.ZerynthApp("DEVICE UID", "DEVICE TOKEN")
    # connect to the wifi network (Set your SSID and password below)
    wifi_driver.auto_init()
    
 
    for i in range(0,5):
        try:
            wifi.link("SSID",wifi.WIFI_WPA2,"PASSWORD")
            break
        except Exception as e:
            print("Can't link",e)
    else:
        print("Impossible to link!")
        while True:
            sleep(1000)
 
    # Start the Zerynth app instance! 
    # Remember to create a template (index.html), 
    # upload it to the Zerynth ADM and associate it with the connected device
    zapp.run()
    
    def set_color(rr, gg, bb):
        global r, g, b
        r = rr
        g = gg
        b = bb
        leds.setall(r, g, b) # set the color of LEDs
    
    # link "set_color" to the function set_color
    zapp.on("set_color", set_color)
    
    
    while True:
        leds.on()       # refresh the LEDs color
        print('r = %i, g = %i, b = %i' % (r, g, b))
        print("..")
        sleep(50)   
 
except Exception as e:
    print(e)

Code snippet #2

Plain text
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        
        <title>Zerynth</title>
        <!-- LOAD JQUERY AND BOOTSTRAP -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
        <!-- LOAD THE ZERYNTH ADM JS LIBRARY -->
        <script src="https://api.zerynth.com/zadm/latest/z.js"></script> 
        <!-- LOAD jqwidget.js -->
        <link rel="stylesheet" href="https://jqwidgets.com/public/jqwidgets/styles/jqx.base.css" type="text/css" />
        <script src="https://jqwidgets.com/public/jqwidgets/jqx-all.js"></script>
        <script type="text/javascript" src="https://www.jqwidgets.com/public/jqwidgets/jqxcore.js"></script>
    </head>        
    <body>
        <div style="text-align:center">
            <p id="status" style="background:#ddd;font-weight:bold"></p>
            <h1>Color Picker</h1>
        </div>
        <div id="colorPicker" style="position: relative; margin: auto;"></div>
        <script>
            
             $(document).ready(function() {
                 
                 
                $("#colorPicker").jqxColorPicker({
                    width: 300,
                    height: 300,
                   colorMode: 'saturation'
                });
                
                $('#colorPicker').bind('colorchange', function (event)
                { 
                var color = $("#colorPicker").jqxColorPicker('getColor');
                    var hex = color.hex;
                    var rgb = color.r + "," + color.g + "," + color.b;
                    Z.call('set_color', [color.r, color.g, color.b]); 
                });
                
                // initialize the Z object
                Z.init({
                    on_connected:  function(){$("#status").html("CONNECTED")},
                    on_error:  function(){$("#status").html("ERROR")},
                    on_disconnected:  function(){$("#status").html("DISCONNECTED"); return true},
                    on_online:  function(evt){$("#status").html("ONLINE");},
                    on_offline:  function(evt){$("#status").html("OFFLINE");},
                    on_event:  function(evt){
                        //display received event; 
                    }
                  })
            });
         
        </script>
        
    </body>
</html>

Credits

Luigi Francesco Cerfeda

Luigi Francesco Cerfeda

6 projects • 95 followers
Yet another Tony Stark wannabe

Comments