 Good evening everyone. I am Anush Gupta from Visual Programming Editor Group and these are my team members, Apurva, Akanksha, Bhanushri and Vignesh went back last week because he was selected in Google Summer of Quotes. Basically why we have developed this application is our main motive was to develop an application for the users who don't know how to write correct syntax code. Like we wanted to develop an application for the users so that they can drag and drop the blocks. So if they know how the correct logic behind it, they can develop the application even without writing a single line of code. So the user need not know the syntax about how he is programming. He just have to drag and drop the blocks and everything will be done automatically. So this is the evolution. Basically it has been derived from Blockly. Blockly is an open source project of Google. It is web based programming editor and users just have to drag and drop the blocks to make a desired application. This is a screenshot of it. Here you can see the user just have to drag the blocks to code it. If he wants to move the person from one point to another, he just have to apply the correct logic. He don't have to write any coding. He just have to drag and drop the blocks and the coding will be done automatically. So if the user knows the correct logic, he can make the correct application. Then from Blockly, BlocklyDunno has been evolved. BlocklyDunno basically use Blockly but it generates Arduino code. Like Arduino code is the code which is used to program Arduino boards. It is a micro controller family and BlocklyDunno provides some blocks. It provides some blocks which generates Arduino code. This is a screenshot of BlocklyDunno where you can see there are various kinds of blocks which are provided and Arduino code is generated for each kind of block. So the user has dragged some kind of blocks to create a logic of his own. In this application, he has dragged the blocks for the blinking of simple LEDs. He don't write any kind of code and as you can see the code is automatically generated. The correct syntax is automatically generated. The user don't have to worry about the syntax or anything else. He just have to worry about the correct logic. Then the main problem behind BlocklyDunno was that the user need to have one more application installed to work with like to complete the application. The user has to use the Arduino code, then copy and paste that Arduino code into an Arduino ID which needs to be installed into his machine and then the Arduino ID will do all the compilation and uploading work. So what our main objective was that everything should be integrated. The user should not have the user should not need to install any other application and everything should be integrated into one app and that should work on Android as well as desktop. This is our application, BlockinoDroid and it is an integration with the functionalities of compilation and uploading of that BlocklyDunno. Everything is integrated into one platform. He just needs to install this. No need to install any other application or Arduino ID, anything else. This was our vision, like no copy and paste of the code into Arduino ID and then to get the desktop as well as Android application. We thought of making both the Android as well as desktop versions of our application and then to make it compatible with different Arduino boards. Currently we have supported two boards, Arduino Uno as well as Arduino Dumelanoff. But if the user wants to add some more boards, he just need to add a configuration class to it and no need to change any other code and that board will automatically be supported. Any other Arduino board. Then there were various kinds of challenges that we faced. The first thing was to like to replicate the Arduino's compilation process. We had to find out how Arduino is working and compiling its code. So what we did, we used and AVR. And AVR is basically it contained AVR GCC and AVR DUDE. They are used, AVR GCC is basically used for compiling that code and AVR DUDE is used to upload that the final compiled code onto the Arduino device. So we used and AVR for Android thing and AVR provides these two tools for Android. Then the next issue was Blocklid Uno. Actually we have used Blocklid Uno. So Blocklid Uno was unable to show up on that Android's web view. When we tried to work it, it was not showing up. So when we find out like we tried many things and finally we used PhoneGap. PhoneGap is basically a library to port these HTML and JavaScript codes onto any kind of platform. So we used PhoneGap which is an open-source thing for porting HTML code onto Android. And PhoneGap was giving Blocklid Uno quite fine. Then customizing Blocklid Uno for Android. As Blocklid Uno was made for desktop versions, so on Android there were various kinds of issues like the blocks were moving here and there and there were like various other kinds of issues on the UI interface which we faced. So we had to change quite a lot of things for it to like to make it compatible on Android screen. Since desktop version is very large and Android screen is very small. So we had to make various kinds of changes into its code. Then some Linux utilities were missing on Android. Basically the whole Android in we thought of like we thought that the user should download and install just our app and he should not get like he should not be prompted to download any other thing after that. So we have put everything, the compiler and everything into our app. So that was becoming quite huge like it's about 180 MB of the whole app. So we compressed it into about 38 of it, 40 MB like now then in the first step only once when the user installs it, it will be decompressed. So the user just need to download that small thing and not the whole app. So for decompressing that we needed some kind of commands which are not present in Android Linux shell. So for that we use busybox. Busybox basically provides various kind of utilities for Android like for Linux shells. So we use various commands which are not present in Android Linux shell with the help of busybox. Then this is just a small overview of compilation process. The first step is the pre-processing. All the headers like which are included into the file into the user's files, a list of them is made in the first step. So this first step is just the pre-processing to include all the header files which are included. Then second is the compiling the user source file. This is the original file in which the code is written. Actually Arduino code basically contains two loops, void setup as well as void loop. In the void setup thing all initializations are done about the pins and everything and in void loop the main code is written about what we want to do. So those two loops they are compiled in this in the second step. Then the third step is to compile the library files included. All the list of the all the headers and everything which is made in the first step, all those included headers are compiled in this third step. Then the fourth step was to compile the core and files for the core and variant. This depends on which kind of board we are using. Suppose we are using Arduino Uno so its cores and other variant files are compiled in this step. Then the fifth step is to compress all those files. Actually there are various kinds of files, a large number of files for those cores and variant. So all these files are compressed into a code.a extension. Code.a file is made in this fifth step to compress all those files into a single file. Then the sixth step is to link all the files into an executable. It is converted into an ELF. All the compiled files are linked into an ELF in the sixth step. And the last step of compilation is to convert that hex so that we can upload that compiled file onto the Arduino device. So this is just a brief overview of the compilation process. Then there are some problems which are still persisting. The first thing is we are unable to upload the hex file generated onto an Android like, onto Arduino through Akash. Basically this is due to a missing CDC module on Akash. Like we used AVRDude, even Arduino IDE uses AVRDude for uploading the hex file generated. So when we tried to use AVRDude to upload a hex file onto Arduino it was showing some kind of errors. So on researching we found that it is due to a missing CDC module. It recognized Arduino as a device which is connected, but it don't know how to communicate with it. It doesn't recognize it as TTYACM and it will recognize it only if there is a CDC module. So it is a missing CDC module, missing CDC module and whenever that CDC module is there in Akash, this thing will work. Directly we can use AVRDude. And then the soft keyboard, basically soft keyboard was not turning up on Akash. Whenever we tried to take inputs into that blocks, soft keyboard was just popping up and then going back. So we used an external keyboard for the time being. There was no such problem with the external keyboard. As we were facing some issues with the Android version, so we have developed the desktop version as well. We have developed the desktop version for both the operating system Linux as well as Windows. Then there are some prerequisites to run the application. For Akash there are no such prerequisites. The user just needs to download the APK file and we have provided everything in that APK, all the compiler and everything is present in that APK and the user don't need to download or install anything else. He just need to install our APK and everything will work. For the desktop version, basically the user needs to have a Java development kit installed on the system before using this. The JDK is required to run the Tomcat server. Basically we have used Tomcat for the desktop version. So he needs to have that JDK installed for running. No other prerequisites are required and for our app don't need any kind of installation. He just has to download it and place it on his system and it will directly run. No need of any installation or installing any other thing. Now these are the future scopes of the projects. Now the user can add some new blocks as per his requirement. As of now many kind of blocks are provided and if user wants to add some new blocks to it, then he can do so. Then other Arduino boards can also be added. As I've already told you, at present we have supported two Arduino boards, Arduino Uno as well as Arduino Dumilano. But to support any other Arduino board, the user just need to add a class. We have provided classes for that. So the user just needs to add its configuration into the code and that board will be supported. Any kind of Arduino board then will be supported. Then the third thing is the desktop version can be developed like we have developed it for Windows as well as Linux. But if someone wants to develop it for Mac OS, he can do so. That's a future scope. Then this is the screenshots of our Akash application that we have made. Actually, this is the first screen which the user will get after the decompressing. After the user download and install the app, the first thing on the tab will be to decompress it. And after the decompressing is that decompressing will be done only once. And after the decompressing is done, this will be the first screen that the user will see. It will say that everything is set up and then it is ready to be used. This is the next screen that the user can see. Here we have provided many kind of things. Like here, on the toolbar thing, the user selects the blocks according to his need, according to his logic. Various kinds of peripherals are supported by it. And then the next tab is the Arduino. In that Arduino tab, the user can see the corresponding Arduino code which is generated. Arduino code will automatically be generated. The user can see that Arduino code according to the blocks which he has dragged into that tab. Similarly, the XML code will also be generated into the XML tab. And then there is a, we have provided a menu toolbar toggle switch. Basically, this is provided because on desktop there is no, there is no shortage of screen length or something. But on Akash tablet, the screen length is very small. So if the user wants to hide that toolbox, he can do so with the help of click of that button. Then there is a button of saving XML. This is basically provided to save the previous project. Suppose user has dragged some kind of blocks and he wants to continue with his project later on. So he can save his project with the help of this button. Then similarly, there is a load XML button to load back the previous project. On the click of a button, the user can load back his previous project and all the previous blocks will be rendered automatically. Then there is a run button to go back to the next screen and to compile the code which is generated. And the discard button to remove all the blocks on the workspace which he has provided. And there is a dustbin on the right hand side. This is basically to remove any particular kind of blocks. If the user wants to remove just some particular kind of block, he just has to drag that block into the dustbin and that will be removed. So on clicking the run button, okay, this screen just provides you the various kinds of blocks. Here we have provided different kinds of blocks. The user just has to drag and drop the blocks according to the code, according to his logic. Suppose he wants to blink the LED for some time and then make that LED low for some time. Then he has to drag the blocks accordingly. And then on clicking the run button, okay, this is the Arduino code. He can see that Arduino code also. This is the corresponding Arduino code which is generated from those blocks. He has dragged just four blocks. First is that, see as I've told you, two loops are generated, void setup as well as void loop. In void setup loop, it has initialized the pins which the user has used. And in void loop use, it has told that write that pin 13th pin to be high and then give it a delay of some time. Then make that pin to be low and then give it a delay of some other time. So everything will be generated on own. The user don't have to worry about the correct syntax or anything else. The correct syntax code will automatically be generated. Similarly, the XML code will be generated of the blocks. Now on pressing the run button, this screen will be shown. Here the same code will be shown that is shown in the Arduino tab. But one more feature is there. If the user wants to add some more code to it, like some user wants that, apart from the blocks he wants to write some Arduino code on his own. So here he can edit that Arduino code and he can write that Arduino code in this screen. Then there are various kinds of options that we have provided. First thing is save. This save is the Arduino code. Suppose he has made some changes into, in the previous screen we have provided the save button to save the blocks which were rendered. Like if he has made some changes into that Arduino code and he had edited this Arduino code on this screen. So the save button will save those changes. Then compile that code and move into the next screen, which will show you the progress of compilation and the compiling of that code. Then load Arduino code to load back the previous edited code. And then create new file to save this code into a new file. And then show examples, basically shows, we have provided some examples for others to show simple examples like blinking of LEDs and all that. So with the click of this, the users can see various kinds of Arduino examples. So on pressing the compiler button, this is the screen which will be shown. Here all that, all the Arduino code will be compiled and all those seven steps will be done in this activity. And suppose there are no errors, then this compilation complete will be shown and the final hex file will be generated. But if there are errors, then those errors will be shown below that screen and it will be written that some compilation errors have been encountered. So user can correct those. See errors will only occur if the user has tried to edit that code. If the user has just dragged and dropped the block, no errors will be generated. But if the user has tried to edit that code and if some errors are there, then he can correct them by going to the previous activity and then compile that again. Then this is the demonstration. First I'll show you with the Akash tab, then the distribution. This is the app. This is the first screen. And on pressing the screen, this is the first screen. Here the users can see various kinds of blocks. Show them the blocks. These are the various kinds of blocks which are provided. The user just has to drag and drop the blocks and the required, according to his logic and the corresponding. Yeah. Suppose he has dragged the two blocks, the corresponding Arduino code will be generated in that tab and similarly the XML code will be generated. Then on pressing the save button, just press the save button. It will ask for a file name to save that project into a directory. And then after you have provided the file name, it will save that file. Similarly, that thing will be done for load Arduino code. Then discard and then just press on run. After pressing on run, that Arduino code will be generated and it will be shown on this screen. Here the user can edit that code and various other menu options are there. Yeah. So suppose he has clicked on the show examples button. So here we have provided some kind of examples. The user just clicks on it and he will be shown the... Select. Yeah. The corresponding example will be shown on the screen. He can compile that also. Yeah. It will be compiled. Yes, it is an example. So it is their example. So no errors will be encountered into this. So if some kind of errors are encountered, those errors will be shown onto it. So now the compilation is done. So if suppose there are some kind of errors like... Suppose in this code, yeah, suppose I have made some errors, then those errors will also be shown into it so that the user can see and correct those errors. So basically the hex file, till the hex file we have done, is generated but as I have already told you, CDC module was not there on Akash. So we were unable to communicate with Advino and we were unable to upload that hex file onto Advino. So hex file will be generated. That you can do. The correct hex file will be generated. But suppose if you want to code it directly from Akash, you don't need anything else. Actually our main motive was to use only Akash. So at present it will not be done and whenever that CDC module is loaded into Akash, it will show the Advino board will be shown as a TTY-ACM and it will know how to communicate with it and directly it can upload that hex file onto Advino. So now I will show you the desktop version. Desktop version works fine with all everything. So like this is the VP Linux, this is the folder. Here the user just selects this file VPUB. So this is the screen which will be shown. Actually these codes are shown because the last saved project will automatically be rendered back. So this is the code which I have done. This is the code for blinking of LEDs. One LED will be blinked at a time. I have just dragged some kind of blocks. The user can drag blocks like this. Suppose he has selected this, then he has to drag these blocks like this. Remove the block with this dustbin. So similarly I have dragged some kind of blocks to create a logic and to program it, the user just click on this button. This run Advino code. And here you go to the next screen. Here in the desktop version also we have provided the facility to edit the Advino code. Here also the user can edit the Advino code on his own. Suppose he wants to add or edit the code. Then here are the options to save that. Change the Advino code to load back the code which he has previously saved. Suppose I don't do anything else, I just compile it. So this will be compiled. It will show the compilation log. If some kind of errors are there, those errors will be displayed onto the screen. Since there are no kind of errors because I have just dragged and dropped the blocks, so everything is correct. So now to transfer this hex file, the user has to provide the port. So in my laptop it's shown as slash jav slash ptyacm0. So I provide that port. Port address to upload. And then click on just upload. So this is the aviadude log, which is showing everything like how it has transferred that code and everything. It's not for the user, we have just provided it to see that aviadude has correctly function. So as you can see, LEDs will be blinking and then it will go back one by one. This is the logic that I have provided. Similarly the user can provide any other logic to implement. One more example I'll show with the servo motor. Then I'll wrap. I've already made a file, so I'll not waste time. I'll just load that file. Okay. These are the blocks which I have provided. Like it is the servo motor. So it will rotate to 90 degree, then 45 degree, then again 90, and then 35 degree. And I have provided a delay of 500 milliseconds. So I'll just click on this run code. It will move on to the screen. Then compile. Then I'll provide the port address. And then click on upload. Since everything has worked fine, so... Yeah. This is the servo motor. Similarly you can program any kind of peripheral with the help of blocks provided. You don't need to write any kind of code. Correct syntax code will be provided. And everything is integrated into one app. No need to install anything. Thank you very much. How much coding did you have to do for this? Actually, for the Blocklidino part, Blocklidino was already implemented. We had to make some changes to work that on that android thing. For Akash. We didn't write some new code for that Blocklidino thing. Only for the compilation and generating that hex file and for all that part, we had to do that coding. Okay. Good job. Thank you very much. Thank you.