Tech Reflect Log
This week we met with our TA, Kjartan to discuss our teams projects & goals. We decided on various aspects of our two-way mirror. Next week we will look into ordering parts and figuring out the main displays we would like to create. Learning python will be critical in order to use Raspberry Pi.
This week we met again with our TA, Kjartan to further better our project proposal which needed to provide more specificity in regards as to where we wanted to take the project. We decided on focusing on creating three displays on our two-way mirror: A calendar, weather, and stock display that will be connected wirelessly and updated by a cell phone. We also made some progress on the physical design of the case that will house our two-way mirror. The last part of the the week consisted of creating a more detailed budget with relative parts which we will be ordering for our project.
This week we made a major step in progress as we ordered the main components of our project. We essentially bought everything except the physical housing for the two-way mirror. We also updated our budget to reflect some minor changes. We did move one part of our component of our Gantt Chart, regarding connecting the Raspberry Pi to the phone a week earlier before our first meeting and evaluation. Kjartan gave us the Raspberry Pi and WiFi connector and we plan on meeting tomorrow as well as a team to work on more coding and connecting. We expect to get the parts next week and look forward to begin coding the weather feature!
This week, our primary objectives were to connect the Raspberry Pi to Andreas’ laptop, access the internet from the raspberry pi, and keep learning python. Originally we were attempting to connect the Raspberry Pi to our cell phone, but decided at least for now that with coding Python on our computers it would be easier to connect via Mac. Andreas was the main task leader this week, and after a few iterations and YouTube videos we were able to successfully pair the two devices and establish a wifi connection.
- Connecting the raspberry pi to the internet: Initially we tried to tether the Raspberry Pi to the WUSTL WiFi network using an ethernet cable and port. Ultimately we were unable to do so successfully since the authentication credentials from Wustl-2.0 was not the same as the general network accessed through the ethernet cable. Our second attempt was using the WiFi dongles. This was a success by inserting one into Andreas’ laptop and the other into the Raspberry Pi, resulting in a stable wifi connection. This will be useful when the raspberry pi needs to access information such as the weather/time.
- Now with the wifi set up, we were ready to connect the r-pi to Andreas’ laptop. We established the connection through the use of terminal and vncviewer. In terminal (on the mac), we were able to access the IP address of the raspberry pi. Fortunately for our concerns about cyber security, we were prompted to enter a password for the raspberry pi. After entering the password that we originally set up, we were able to set up a vncserver on the r-pi and connect to it using vncviewer.
Setting up the raspberry pi: We first powered up the r-pi (04) and connected it to a monitor using an hdmi cord(6). To set up an account and a password for the raspberry pi, we needed to connect a keyboard (01) and a mouse (02). Once we had established an account and password and accessed the main r-pi desktop (which was already set with raspbian thanks to the preloaded memory card (05)), we set up the wifi connection using the wifi dongle (03). Now we were able to access the r-pi from Andreas’ laptop so we unplugged the HDMI cable, the mouse, and the keyboard.
We have all be learning to code in Python thanks to Codeacademy.com which again is an ongoing process and learning experience as we begin the process of starting to code our first feature, the Weather App.
This past week, we completed a functioning weather module. We finished the Python Codeacademy course earlier in the week and while it was a solid intro course course, we needed to know more about importing modules and using API's. Fortunately, Codeacademeny also offered an API specific tutorial. With help from Codeacademy as well as additional youtube/python.org tutorials, we were able to get a simplified weather module running. In order to access weather information, we have been using the Dark Sky forecast API (https://darksky.net/dev/docs/forecast) which can easily be called to return the current conditions. In order to present the temperature and conditions on the LCD monitor, we wrote a simple program which contains an array of icons (sunny, cloudy, partly cloudy, rainy) and returns the temperature value from the Dark Sky API.
This week we also made sure to test all of our parts to make sure that they were working as expected. We hooked up the raspberry pi to the LCD screen which worked perfectly. Next we placed the r-pi behind the mirror. At first, even the dark spots on the LCD were showing up (which we certainly don't want); however, after some tests, we fixed this issue by changing the contrast on the screen in order to reduce the amount of light that the darker spots give off. This way only our bright white text will show up through the mirror.
This week, we were able to get the previously discussed weather program to function completely on on the raspberry pi. We used the Dark Sky API to pull information about current weather conditions and then wrote a program in Python to display these conditions in an organized manner. We then tested to ensure that this weather condition display program could be successfully displayed onto the LCD screen. Now that we have, for all intents and purposes, completed the weather module portion of the project, we began to look into the ways we can display other proposed modules such as time and calendar. For the calendar, we found the Google Calendar API to be a viable option to display calendar features on the raspberry pi. The Google API would allow the user to access private and public calendars and calendar events.
In addition to completing the weather program, we built a functional wood frame for the mirror. We built a frame in which the mirror can easily and securely sit, but that does not take up too much mirror space. This initial frame seems to be sufficient for now but could require some changes based on future unforeseen problems with the fit of the mirror, raspberry pi, or the LCD screen. One problem we have run into is with the mirror itself. Because of the material it is made out of, the mirror has a tendency to bend and warp a slight amount. Any distortion in the shape of the mirror would obviously cause unwanted distortion in the reflected image. We are currently trying to weight the mirror down to flatten it, and, theoretically, a properly built frame will be able to keep the mirror in a proper flat shape.
One of the main things we worked on this week was attempting to crete a functioning calendar module using the Google Calendar API that would theoretically allow the user to import private and public events into the calendar through their Google account. However, the use of the Google API system has proven to be much more difficult and troublesome than we first thought and has therefore caused us to start to rethink our strategy. At this point, we feel the best option will be to code a non-internet connective calendar that has less capability than one using the Google API. The new calendar will have less features but will still be able to display the date, day of the week, and holiday. It is unclear if a regular user will be able to easily import and remove new events themselves; however, we will likely be able to write in events and holidays of our own choosing. We are working on also solving connectivity consistency with the Raspberry Pi.
This week we worked more with the Google Calendar feature but have still been unsuccessful. Unfortunately given various commitments and conflicts we did not have as productive of a week to get the Google API working like we discussed last week. Our goal is to get the calendar displayed successfully in addition to our stock which will both join the weather widgets. We are also going to soon assemble the mirror and LCD screen once the coding is soon complete.
This week we worked on finishing up the Google Calendar. We also had our second Check In. We realized to make the project especially appealing that our frame must look like it can fit within a home - in other words have it looking clean, sharp, with minimal wires sticking out. Since we were able to pair our iPhone with the Raspberry Pi we are looking into the possibility of being able to switch the displays easily using a phone. During our demo we did have problems loading the Pi onto the LCD screen, so we need to ensure for the final that we will not have any issue.
This week we began working on the stock feature. We mainly focused on creating the frame. We cut 2 pieces of wood the same size as the frame. The first will compress the LCD screen to the two way mirror. This first layer fits snugly into the frame. Between this piece and the second layer of wood we will house the rest of the electronics. We are going to Home Depot to look into buying some latches to keep the entire system together.
We made major progress and completed our project this week. First in regards to the frame, we successfully created a triple layer frame to house our LCD Screen, Raspberry Pi, and various power supply chords. The LCD display screen lays on top of the mirror and is secured with zip ties to a piece of wood that compresses the screen to the mirror. This piece of wood also blocks all light coming from the screen. On top of this wooden panel sits all of the hardware such as the Raspberry Pi and power supply lines. The final layer is another piece of wood to cover all of the hardware with small cutouts to allow easy access to crucial hardware.
While we successfully created the date, weather, and calendar functions, after much effort we were unsuccessful in creating the stock widget. To fill this empty space we did figure out successfully how to create a news feed at the bottom of the display. We used the Google Feed API which uses an RSS (Rich Site Summary) to pull current information from major headlines regularly. While we did not succeed with the stock option this is a substitute we were pleased with. The good news about the news feed is that it fills the LCD screen nicely and is another great source of information.
The poster was also created and printed and we are excited to conclude this project with our demo.
We concluded our demo and poster presentation this past week. We were also able to observe many of the other group's projects. The last thing left to do is finish finalizing and updating the Wiki page and creating a How To. Once finished, we will be completed with the course!