The World Wide Web no longer stops at the edge of your screen. When it comes to products, if it powers up, it talks to another device. This class present an overview of methods for connecting the physical world to web-based applications. We’ll consider what the emerging interaction patterns are, if any, and we’ll develop some of our own as needed. This class can be seen as a narrower and more interaction design-based complement to Understanding Networks. The latter class provides a broader overview of the dynamics of data networks, while this class focuses specifically on the challenges of connecting embedded devices to web-based services. Neither class is a prerequisite for the other, however. The 2-point version of this class will introduce network connection techniques for devices using microcontrollers like the MKR1000, MKR1010, Nano 33 IoT, or ESP8266 and processors running an embedded operating system like the Raspberry Pi or BeagleBone.
Learning Objectives: Students will gain an understanding of the basics of client-server web-based programming for devices with limited computing power. They will learn about current protocols for communication between devices and web servers, and about the rudiments of security for that communication.
Reading: There will be an article or two to read each week, to foster discussion about the design of connected things. For further reading, see the reading link on this site.
Although it’s not required, you may find my book, Making Things Talk 3rd Edition, useful. A lot of what I know about how to connect devices to networks is in this book. This edition contains explanatory material and examples relevant to much of this class. It’s available digitally through the NYU LIbrary’s O’Reilly Safari subscription.
Please fill out this questionnaire so I have a better sense of your skills and your interests in this class.
Week 1: Jan 28
- Microcontroller-based web devices: MKR1000, MKR1010, Nano 33IoT, ESP8266, and their WiFi libraries
- Intro to command line
- Assignment: Make a hardware client for the ball drop game. Due next week.
- Related material:
Week 2: Feb 4
- Presentation: Socket game
- Connected devices with web APIs: Philips Hue
- ArduinoHTTPClient library
- How to test with curl on the command line
- Assignment: Make a hardware interface for the Philips Hue or other existing consumer device. Due Week 4. This week, get a bulb or two from the ER working from the command line or from the p5 client sketch in the hue-control repo.
- Ashton, “That Internet of Things Thing“
- Greenfield, Rise of the machines: who is the ‘internet of things’ good for?
- Igoe, Tom, Best Practices for Connected Devices
- Zuboff, Shoshana, You Are Now Remotely Controlled
Week 3: Feb 11
- HTTP, HTTPS, and encryption
- Real-time Clock, sleep functions
- Claire Rowlands for IOTUK: UX And Service Design for Connected Products Report. This is a very useful report covering many practical principles for connected devices and services design in the commercial sphere. You may want to scan through it first to get the overall concepts, then go back a second time in detail. It summarizes many of the ideas in Rowland’s Designing Connected Products book.
- Related material:
- Matthew Chalmers and Ian MacColl, “Seamful and Seamless Design in Ubiquitous Computing“
- Timo Arnall, No to NoUI
- Matthew Chalmers, Seamful Design and Ubicomp Infrastructure
Week 4: Feb 18
- Presentation: interface for Hue
- Assignment: Make a web-connected environmental monitor. The server will be provided for you. Or update your Hue client. Due by week 7
- Kashmir Hill and Surya Mattu, “The House That Spied On Me“
- Surya Mattu, “Your Smart Home Is Spying on You. Here’s How to Spy Back.”
- Associated repository of code, for those interested
Week 5: Feb 25
- Digital I/O from the Pi via node.js
Week 6: Mar 3
- More on Pi and node.js
Week 7: Mar 10
- Presentation/In-class exercise: review of web-connected final devices
Do not copy and paste examples in this class. You’ll see many examples of code, circuits, and design, but when it comes time to make your own projects, start with a blank page and write or design it yourself. You’ll internalize any given toolset or library better by using it yourself rather than copying and modifying the work of others.
When you copy or learn from someone else’s code or design, cite it in your documentation and link to it if possible. Maintaining a link to the previous work from which you learn is essential to getting better at your craft.
Build a housing for your projects. Even if it’s a cardboard box with your sensors mounted on the outside and your circuit inside, this allows us to see the interface you intended, and to consider how well we can interact with it. Getting in this habit from day one of a project will help you to think about both the users’ needs and the best controls and components for the job.
Provide feedback on both the local interaction and the network connection on the device itself. Physical devices that rely on an external app or web interface are less effective than those that can be read from their physical appearance and behavior. Even the simplest feedback, such as an LED to tell when a device is successfully connected, can change the effectiveness of a networked device significantly.
Document your class assignments and your progress on your own blog. Besides being a useful record for your portfolio, regular blog posts provide a record your process that you can look back on later to understand how you solved problems you encountered in this class. They also help me to follow your progress through the class.
Blog posts about your production assignments should include:
- A short paragraph describing the project
- Photos and video of the project in action
- System diagram
- Circuit diagram/Schematic
- Links to Source code
- Any construction drawings you made for laser cutting, CNC, etc.
- Citation of all example code or example drawings or documentation that you learned from or used
Grading will be based on the following:
- In-class participation. Come with questions and insights, do some background reading in advance of class so you’re ready to join the discussion, listen when others are presenting, give your classmates feedback: 1/3
- Assignments. Attempt each assignment and document it, including what didn’t work, and your questions as to why or why not: 1/3
- Documentation. Keep notes on what you do online, for yourself and others to learn from: 1/3
This class has a “lids closed” policy by default. Please keep your laptop closed during all class discussions. When we are workshopping a particular technique, then laptops and other components will be necessary, of course. But when other students are presenting, or we are discussing topics broader than technique, please give the class your full attention. Similarly, please keep all mobile phones on silent mode and in your bag while in class. If you are expecting an emergency call, please let your instructors know in advance.
Statement of Academic Integrity
Plagiarism is presenting someone else’s work as though it were your own. More specifically, plagiarism is to present as your own: A sequence of words quoted without quotation marks from another writer or a paraphrased passage from another writer’s work or facts, ideas or images composed by someone else.
Statement of Principle
The core of the educational experience at the Tisch School of the Arts is the creation of original academic and artistic work by students for the critical review of faculty members. It is therefore of the utmost importance that students at all times provide their instructors with an accurate sense of their current abilities and knowledge in order to receive appropriate constructive criticism and advice. Any attempt to evade that essential, transparent transaction between instructor and student through plagiarism or cheating is educationally self-defeating and a grave violation of Tisch School of the Arts community standards. For all the details on plagiarism, please refer to page 10 of the Tisch School of the Arts, Policies and Procedures Handbook, which can be found online at: http://students.tisch.nyu.edu/page/home.html
Statement on Accessibility
Please feel free to make suggestions to your instructor about ways in which this class could become more accessible to you. Academic accommodations are available for students with documented disabilities. Please contact the Moses Center for Students with Disabilities at 212 998-4980 for further information.
Statement on Counseling and Wellness
Your health and safety are a priority at NYU. If you experience any health or mental health issues during this course, we encourage you to utilize the support services of the 24/7 NYU Wellness Exchange 212-443-9999. Also, all students who may require an academic accommodation due to a qualified disability, physical or mental, please register with the Moses Center 212-998-4980. Please let your instructor know if you need help connecting to these resources.