Arduino on Cloud

Getting Shortlisted

To get shortlisted for the FOSSEE Fellowship 2022, you need to complete at least one of the screening tasks given below and demonstrate a working software without breaking the existing functionality. The selection will be purely based on the evaluation criteria. Also note, you are allowed to use only open source libraries/technologies and attribute them appropriately in your project based on the license. In case a particular technology is already adopted in the platform, you will need to use the same and extend/modify the existing one.

Note: 

Technical Skills


Evaluation criteria

How to contribute your screening tasks?

Getting Started

Task 10: Playing songs on Arduino

Do NOT attempt this task. It has already been implemented

The current buzzer is programmed only to give output (a) 'high' i.e. 'sound is on' or (b) 'low' i.e. 'sound is off' and at a specific frequency. The tone() function of the Arduino generates a square wave of the specified frequency (and 50% duty cycle) on a pin. The syntax for using tone is tone(pin, frequency, duration). Based on the frequency and duration set in the tone(), songs can be played using Arduino. Since, the current system does not support tone(), the songs are not playable. In this screening task you need to add this functionality by modifying 'ArduinoFrontend/src/app/Libs/outputs/Buzzer.ts' and such other files.


Reference:

https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/

https://github.com/robsoncouto/arduino-songs

Task 1: Incorporating new components in the Platform 

In the Arduino on Cloud platform, the majority of the components are already available, like Arduino Uno, Breadboard, Buzzer, Seven-Segment-Display, LCD, etc. In this screening task, we propose to add the following components: 

Please refer to the following Spoken Tutorials to understand the interfacing of the above components to Arduino Uno and the way sketch files (.ino) are written.  

https://spoken-tutorial.org/watch/Arduino/Pulse+Width+Modulation/English/

https://spoken-tutorial.org/watch/Arduino/Analog+to+Digital+Conversion/English

https://spoken-tutorial.org/watch/Arduino/Wireless+Connectivity+to+Arduino/English/

https://spoken-tutorial.org/watch/Arduino/Digital+Logic+Design+with+Arduino/English

You are free to choose any two components from the above list, build and integrate in our system, such that it does not break the existing code.

Task 2: Versioning support for .ino Code files and Schematic 

(Do not attempt this task)

In this task, you are required to have versioning support for code files and the circuit schematic. You would need to design and implement the required functionality so that the circuit history is maintained. One of the uses is that the creator of the circuit can view different versions in time and revert to a particular version. Another use is in maintaining the history that can then later be used by experts to analyze the way people build circuits. 

Task 3: Some improvements and Bug fixes 

The following are the possible improvements and bug fixes:

Task 4: Wiring Suggestions on demand 

Consider a Temperature sensor, an analog device having 3 pins, i.e., VCC, GND, and analog output. When the user drags-and-drops on the schematic, the system should automatically suggest connecting to appropriate pins of Arduino, i.e., to VCC, GND, and one of the analog pins of Arduino, respectively. Design and implement such functionality such that the user experience is enhanced while designing. This can be implemented as a rule-driven mechanism.

Task 5: Auto generation of .ino code 

When the user connects/interfaces components to the Arduino board, there should be a real-time mechanism to automatically generate the .ino code files. Much of the components have a standard code which can be auto-generated. 

Task 6: Assembly Support for the .ino files 

(Do not attempt this task)

Presently, only sketch .ino files (c code) are supported, as the backend arduino code compiler  does not have the ability to compile. Your task is to add support for compiling assembly language. Please look at the GitHub issue which mentions the problem and possible approach in solving it: https://github.com/frg-fossee/eSim-Cloud/issues/164 

Task 7: Add LTI support for the system 

Please do not attempt this task. It is currently being addressed.


Learning Tools Interoperability, also called as LTI, is a way in which an LMS (learning management system like edX, Moodle, Canvas, Blackboard, etc. addressed as LTI Consumer) communicates with external tools/systems/utilities, addressed as LTI Producer (Arduino on Cloud). To a normal user, it appears as if the external tool is embedded into the LMS in a frame. 

LTI Consumer: The instructor adds the LTI tool (resource, in our case a circuit) into the LMS using the LMS tool and enters information like secret, key, and URL. When the students view the resource, i.e., a circuit, the LMS uses the secret, key, and URL to activate the resource such that the resource can be viewed by the students in a remote tool/iframe. 

LTI Producer: The external tool, in this case Arduino on Cloud, receives the request containing information like secret, key, URL, user identity, course information, etc. This is communicated via HTTP using OAuth to ensure security of the data that is sent. The external tool then renders the resource to the requested user.

In this task, you need to add LTI support to the existing Arduino on Cloud application in the manner described above. 

Links for Reference

http://www.imsglobal.org/activity/learning-tools-interoperability 

https://github.com/rohitjose/django-lti-auth

https://github.com/Harvard-ATG/django-app-lti

Task 8: Circuit Publishing Workflow 

Please do not attempt this task. It is of low priority at present. It will be addressed in the future. 


The users in the existing system do not have any roles assigned to them. They are allowed to create a circuit and share the link. Hence, the circuit is visible only to the user or to only those who have the link. There is no facility to collate circuits at one place for everyone to see. The task is to do the following:


Given below is just a sample. To reiterate, the roles, states, and the workflow, all should be configurable. Also note that, when the reviewer creates a circuit, he is considered as a Contributor and thus, the reviewer for that circuit must be some other reviewer other than the one who created it.

In the draft mode above, the circuits are not visible or published in the public domain. There could also be a mechanism to view all the circuits in various states i.e. all states visible to the public. Such a switch could be set by an authorized user of the system, say admin. The users should then be able to search based on the state and then copy, re-use, modify the circuitry. The number of draft and inactive circuitry (not used for long) can be further hidden by authorized users (admin) to improve the overall search experience.

Task 9: Import and export project

Please do not attempt this task. It has already been addressed.


Currently, an authenticated user can save the circuit on the cloud. However, there should be a facility for a user to export the circuit in some format (say json) and import the circuit into the system as and when needed.

GitHub: https://github.com/frg-fossee/eSim-Cloud


Chat with us (Discord): https://discord.gg/cZbDD8K


Email: frg.cloud.simulation@gmail.com


FOSSEE Fellowship 2021