My favourite prototyping development board is Arduino Uno and Nodemcu #ArduinoUyir:fire: Because with these 2 board we can do most projects. Single Analog pin is the only problem with Nodemcu. That can be resolved by any other basic Arduino family development board. Both these two boards I fall in love:heart: with hardware. Nodemcu's WiFi+Uno's digital/analog pins. Also using these two a begginer can learn almost everything in hardware.

Best posts made by rafitc99
-
RE: What's your favorite embedded/prototyping development board?
-
CODE-VID 19 -Kerala Police Cyberdome Online Hackathon
Kerala Police Cyberdome is conducting Online Hackathon “CODE-VID-19” to find IT based innovative solutions that can help Police in the fight against COVID-19. Inviting tech-community across India to come forward and contribute to this mission. Showcase your Technical skills to Stop-Prevent-Contain the Pandemic. CODE-VID 19 envisages to find technology based innovative solutions for the Police to effectively contain corona virus for the benefit of society. The last date of submission of your idea and technical solutions is 29-03-2020. The best idea will be suitably rewarded.
Registration Link: https://forms.gle/PiJho8MsGkibVUgTA
-
What is Watchdog timer ?
What the situation while your micro-controller confused in an infinity loop😖. Is there any case like hang or stuck your micro-controller while performing a task😖. What are the normal troubleshooting method? Reset Button, Right? Is it practically possible to do press on a button all time ?😕. So, What about a device to do this task ? sounds good. Cool...!🙂
Read the full blog : https://makergram.com/blog/watch-dog-timer/
-
Amazon Alexa Challenge: Hack Club-India
The Challenge
Do you think you can come up with some interesting ideas revolving around Amazon Alexa? What if we could help you build that idea into a reality. Tell us about your idea and the best one wins an Amazon Alexa Echo Dot.
🧲 Bonus points for those solutions involving Covid-19 or promoting social-distancing.
Schedule🗓️
- Application - The application starts on 26th June 2020.
- Closing - The registration will end on 17th July 2020.
- Results - The results declared by last week of July
For Registration: https://alexa.hackclub.com/
-
RE: Nodemcu(esp8266) firebase connecting issue
@mhmdrameez I used that library before 6 Month ago and Worked fine. But now, it's not working. I think there are some issues with the library. Because there are somany open issues in GitHub Repo.
But while trying with Firebase ESP8299 Client library, which is listed on Arduino library manager it's worked fine for me. So, make a try using this library.
Library: Tools >> Manage Library > search for firebase esp8266
My output :
Firebase:
-
RE: Error While writing Library for Gy521
@salmanfaris forgot to call function
getAcData()
andgetGyData()
beforegoo.AcX
... :joy: -
Arduino powered products
Is there any commercial product which powered by ATMEGA328P with Arduino bootloader? Also, Is there any problem to use micro-controller in commercial products which using Arduino sketch?
-
RE: ESP8266 Restart while running ISR. [ESP8266 FreeRTOS SDK]
Update!!
I found the issue
I created a Queue inside Rgpio.cpp and called a Funciton from main.cpp to check data in Queue. That worked well!!Reference to the #commit .
-
Call for Makers: Virtually Maker Faire – May 23, 2020
24 Hours of Presentations, Workshops, Demos, and Exhibits Across All Time Zones
Across the world, makers have responded to shortages of medical supplies and equipment with agile designs, adaptive distributed manufacturing, and community organizing. Virtually Maker Faire will be a stage to share the projects and learn from the people behind this extraordinary civic response.
Virtually Maker Faire will take place online through video sessions and an exhibit showcase on Make: Projects
Virtually Maker Faire Tracks
Community Organizing
- The organization of local distribution networks for pickup and delivery.
- Tools and methods used to manage volunteers and incoming requests.
- Creating awareness in government, industry and citizens; Funding models or lack thereof.
Learning and Teaching
- How are maker educators adapting to digital tools.
- Encouraging hands-on learning at home.
- Doing hands-on workshops and courses online.
- How to train more people to participate in the civic response.
Re-thinking the Future
- How the pandemic and our response to it is teaching us to think differently.
- How, where and why we do things.
- Sustainability. Food. Well-being.
Design & Production
- The development, rapid prototyping, testing, and deployment of shared * solutions. Specific projects and how they developed.
- How capacity to produce locally matters to the response.
- Iterating to meet needs and respond to feedback from health care work.
Making
- Necessity of DIY.
- Making for fun.
- To keep one’s sanity.
- Social connections.
If you’ve been involved in the civic response for COVID-19, we want to hear from you! Tell us about your projects, share what’s going on in your community, tell us how your makerspace, FabLab, maker club or school is involved. Your stories and insight can help others. Get involved by organizing or leading a panel discussion, host a workshop or demonstration, share a presentation, or contribute a project.
Latest posts made by rafitc99
-
RE: ESP8266 Restart while running ISR. [ESP8266 FreeRTOS SDK]
BaseType_t xQueueSendFromISR ( QueueHandle_t xQueue, const void *pvItemToQueue, BaseType_t *pxHigherPriorityTaskWoken );
I was trying to pass a pointer. That was the issue.
Reference -
RE: ESP8266 Restart while running ISR. [ESP8266 FreeRTOS SDK]
Update!!
I found the issue
I created a Queue inside Rgpio.cpp and called a Funciton from main.cpp to check data in Queue. That worked well!!Reference to the #commit .
-
ESP8266 Restart while running ISR. [ESP8266 FreeRTOS SDK]
I'm trying to pass a value into Queue from Interrupt Service Routine(ISR) using
xQueueSendFromISR()
<-- ReferenceBut I'm getting this error and ESP restart immediately.
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled. Core 0 register dump: PC : 0x4021227c PS : 0x00000033 A0 : 0x4021c72e A1 : 0x3ffe8220
Here is the gpio interrupt example which I'm following.
Here is my code. I did some modification in this.
Check 70th line of this location.
static void main_power_isr_handler(void* arg) { xQueueHandle* main_q = (xQueueHandle*)arg; static main_q_payload_t msg; msg.hdr = E_MAIN_MSG_MAIN_POWER_STATUS; msg.bool_payload = gpio_get_level(GPIO_MAIN_POWER); //ets_printf("Someone Interrupted \n "); xQueueSendFromISR(main_q, &msg, NULL); //!!! THIS LINE }
-
RE: SIM800L is not working after disconnecting with PC
Thank-you @salmanfaris
It's solved.
Actually, It was my mistake. I didn't add a proper reset for MCU. -
RE: SIM800L is not working after disconnecting with PC
@salmanfaris When connecting with PC. It will work well.
-
RE: SIM800L is not working after disconnecting with PC
@salmanfaris At that time not receiving an actual message. Receiving a blank message.
-
RE: SIM800L is not working after disconnecting with PC
@salmanfaris Yes. I'm providing common ground. Resistors also working.
-
RE: SIM800L is not working after disconnecting with PC
@salmanfaris
Sorry, leave that part
Actually I was using("AT+CMGS=\"" +number+ "\"");
this part and passing number into the funciton. This different functions all are done part of debugging.:grinning: just checking Is there any problem in string handling. -
RE: SIM800L is not working after disconnecting with PC
@salmanfaris
This is my messy code.#include <SoftwareSerial.h> //#include <avr/wdt.h> //Create software serial object to communicate with SIM800L SoftwareSerial mySerial(9, 2); //SIM800L Tx & Rx is connected to Arduino #3 & #2 String content = ""; int Pulses = 3; //connect water flow sensor volatile int pulsecount; //Variable to count number of pulses unsigned long curr, prev, interval = 5000; int led = 11; long count = 0; unsigned long onCall_prev_time, onCall_interval = 15000; unsigned long timer; bool ledFlag = 0; bool smsFlag = 0; // sms flag bool ackFlag = 0; //acknowledge flag bool ackFlag_1 = 0; //acknowledge flag bool recSmsFlag = 0; //Receive SmS flag int statusAck = 0; bool onCall_flag = 0; //to check call status int c = 0; bool terminate_flag = 0; //Flag to terminate whole event bool terminate_flag_1 = 0; //Flag to terminate whole event String number_1 = "YYxxxxxxxxxx"; String number_2 = "YYxxxxxxxxxx"; String number_3 = "YYxxxxxxxxxx"; String number_4 = "YYxxxxxxxxxx"; String test = "YYxxxxxxxxxx"; String userName; void setup() { pinMode(led, OUTPUT); pinMode(Pulses, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(Pulses), CountPulses, FALLING); //Begin serial communication with Arduino and Arduino IDE (Serial Monitor) Serial.begin(9600); //Begin serial communication with Arduino and SIM800L mySerial.begin(9600); Serial.println("Initializing..."); delay(500); Serial.println("Watchdog Enabled "); mySerial.println("AT+IPR=9600"); updateSerial(); //wdt_enable(WDTO_8S); } void updateSerial() { //wdt_reset(); detachInterrupt(CountPulses); delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while (mySerial.available()) { Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port } } void recSerial() { String msg; detachInterrupt(CountPulses); delay(500); while (Serial.available()) { mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port } while (mySerial.available()) { detachInterrupt(CountPulses); msg = mySerial.readString();//Forward what Software Serial received to Serial Port processMsg(msg); } } void loop() { //wdt_reset(); Serial.println("Loop strated----++++---++"); pulsecount = 0; //Start counting from 0 again interrupts(); //Enables interrupt on arduino pin 3 delay(1000); detachInterrupt(CountPulses); //Calculating the water flow rate in Milli Liters per minute long flowRate; flowRate = (pulsecount * 2.22 * 60); Serial.print("Flow rate="); Serial.print(flowRate); //Print milli liters per minute on serial monitor Serial.println("mL/minute"); recSerial(); digitalWrite(led, ledFlag); //Set or reset led based on the flow if (ackFlag_1) { Serial.println("Acknowledge Received-----------------------"); content = "ACK received from " + userName +" paused all notifications "; smsSend_5(content); ackFlag_1 = false; } if (terminate_flag_1) { content = "GOT 'TERMINATE' From "+userName; smsSend_5(content); terminate_flag_1 = false; } if (onCall_flag) { Serial.println(c++); if (c >= 15) { Serial.println("Calling Event Completed"); mySerial.println("ATH"); updateSerial(); onCall_flag = false; c = 0; } } if (statusAck) { if (pulsecount != 0) { smsSend_5("No problem. it's working perfectly!"); statusAck = 0; } else if (pulsecount == 0) { smsSend_5("It's Not working!!!!"); statusAck = 0; } } if (!recSmsFlag) { Serial.println("Setting into Receive Mode"); recMode(); recSmsFlag = true; } if (flowRate > 1) { Serial.println("Reseted all countors for new event ---++"); count = 0; //Reset countor prev = 0; //reset timer; ackFlag = false; //reset ACK flags smsFlag = false; //Sent sms flag terminate_flag = false; //Reset Terminate flag ledFlag = 1; //Set LED Flag } if (flowRate == 0.00) { curr = millis(); Serial.println("flowrate is Zero!!"); ledFlag = 0; //Reset flag //wdt_reset(); Serial.println("Reseted Watchdog"); if (curr - prev >= 1000) { prev = curr; Serial.print(count++); Serial.println(" Seconds"); if (count == 30 && ackFlag == 0) { Serial.println("ALERT 1 - FLow not working for 30 Seconds"); //ackFlag = 0; smsSend_5("Flow is Zero about 30 Seconds!!!"); smsFlag = true; //set sms flag //Send To other number too! //wdt_reset(); Serial.println("Reseted Watchdog"); //Send SMS } if (count == 40 && ackFlag == 0) { Serial.println("ALERT 1 - FLow not working for 40 Seconds"); //ackFlag = 0; //smsSend_5("Flow is Zero about 40 Seconds!!!"); smsFlag = true; //set sms flag //Send To other number too! //wdt_reset(); makeCall(test); onCall_flag = 1; Serial.println("Reseted Watchdog"); //Send SMS } if (count == 50 && ackFlag == 0) { Serial.println("ALERT 1 - FLow not working for 50 Seconds"); //ackFlag = 0; smsSend_5("Flow is Zero about 30 Seconds!!!"); smsFlag = true; //set sms flag //Send To other number too! //wdt_reset(); Serial.println("Reseted Watchdog"); //Send SMS } if (count == 60 && ackFlag == 0) { Serial.println("ALERT 1 - FLow not working for 60 Seconds"); //ackFlag = 0; smsSend_5("Flow is Zero about 30 Seconds!!!"); smsFlag = true; //set sms flag //Send To other number too! //wdt_reset(); Serial.println("Reseted Watchdog"); //Send SMS } if (count == 90 && ackFlag == 0) { Serial.println("Not working for 1.5 minutes"); makeCall(test); //smsSend(); //SmS //wdt_reset(); Serial.println("Reseted Watchdog"); } if (count == 150 && ackFlag == 0) { Serial.println("Not working for 2.5 minutes"); // makeCall(test); //make call to Number 2 smsSend_5("Flow is Zero about 2.5 Minutes!!!"); //smsSend(number_2,"Flow is Zero about 2.5 Minutes!!!"); //smsSend(number_3,"Flow is Zero about 2.5 Minutes!!!"); //smsSend(number_4,"Flow is Zero about 2.5 Minutes!!!"); //SmS //wdt_reset(); Serial.println("Reseted Watchdog"); } if (count == 210 && ackFlag == 0) { Serial.println("Not working for 3.5 minutes"); smsSend_5("Flow is Zero about 3.5 Minutes!!!"); // makeCall(number_1); //make call to Number 3 //smsSend(); //wdt_reset(); Serial.println("Reseted Watchdog"); //SmS } if (count == 270 && ackFlag == 0) { Serial.println("Not working for 4.5 minutes"); smsSend_5("Flow is Zero about 4.5 Minutes!!!"); // makeCall(number_2); //make call to Number 4 //smsSend(); //SmS } if (count == 180 && terminate_flag == 0) { Serial.println("just a reminder"); smsSend_5("Blower is not working more than 8 minutes"); // smsSend_5("It's been 8+ Minutes Your blower is not working."); //smsSend(number_3,"It's been 8+ Minutes Your blower is not working. Hope Now, You are working on that ;)"); //smsSend(number_4,"It's been 8+ Minutes Your blower is not working. Hope Now, You are working on that ;)"); } if (count >= 600 && terminate_flag == 0) { Serial.println("DANGER!!!"); smsSend_5("DANGER!! Flow is Not working more than 10 Minutes!!!"); count = 0; ///SmS } } } } void CountPulses() { pulsecount++; //Increment the variable on every pulse } void recMode(){ Serial.println("Setting Recieve mode"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); updateSerial(); mySerial.println("AT+CNMI=1,2,0,0,0"); updateSerial(); } void smsSend_1(String content) { detachInterrupt(CountPulses); Serial.println("SMS sending"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");//("AT+CMGS=\"" +number+ "\""); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(content); //text content updateSerial(); mySerial.write(26); Serial.println("sent!!"); recSmsFlag = false; //Reset Rec SMS flag } void smsSend_2(String content) { //wdt_reset(); detachInterrupt(CountPulses); Serial.println("SMS sending"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");//("AT+CMGS=\"" +number+ "\""); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(content); //text content updateSerial(); mySerial.write(26); Serial.println("sent!!"); recSmsFlag = false; //Reset Rec SMS flag } void smsSend_3(String content) { detachInterrupt(CountPulses); Serial.println("SMS sending"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");//("AT+CMGS=\"" +number+ "\""); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(content); //text content updateSerial(); mySerial.write(26); Serial.println("sent!!"); recSmsFlag = false; //Reset Rec SMS flag } void smsSend_4(String content) { detachInterrupt(CountPulses); Serial.println("SMS sending"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");//("AT+CMGS=\"" +number+ "\""); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(content); //text content updateSerial(); mySerial.write(26); Serial.println("sent!!"); recSmsFlag = false; //Reset Rec SMS flag } void smsSend_5(String content) { detachInterrupt(CountPulses); Serial.println("SMS sending"); mySerial.println("AT"); updateSerial(); mySerial.println("AT+CMGF=1"); // Configuring TEXT mode updateSerial(); mySerial.println("AT+CMGS=\"+ YYxxxxxxxxxx\"");//("AT+CMGS=\"" +number+ "\""); //change ZZ with country code and xxxxxxxxxxx with phone number to sms updateSerial(); mySerial.print(content); //text content updateSerial(); mySerial.write(26); Serial.println("sent!!"); recSmsFlag = false; //Reset Rec SMS flag } void makeCall(String number1) { detachInterrupt(CountPulses); recSmsFlag = 0; //Reset Rec SMS flag mySerial.print (F("ATD")); mySerial.print (number1); mySerial.print (F(";\r\n")); updateSerial(); onCall_prev_time = millis(); Serial.print("----Calling to "); Serial.println(number1); onCall_flag = true; //delay(15000); } String getName(String nameOfuser) { String user; detachInterrupt(CountPulses); Serial.print("Get Name is Running ----------"); if(nameOfuser.indexOf(number_1)>0){ user = "Rashad"; //name of first user return user; } else if(nameOfuser.indexOf(number_2)>0){ user = "Hashim"; //name of second user return user; } else if(nameOfuser.indexOf(number_3)>0){ user = "Rasil"; //name of third user return user; } else if(nameOfuser.indexOf(number_4)>0){ user = "Anas"; //name of fourth user return user; } else if(nameOfuser.indexOf(test)>0){ user="Rafi"; return user; } else{ user = "Unknown"; return user; } } void processMsg(String msg){ Serial.print(msg); detachInterrupt(CountPulses); Serial.println("process started!!!!!----------"); digitalWrite(11,1); delay(500); digitalWrite(11,0); if ((msg.indexOf("Stop")>0)) { Serial.print("Got ACK from------ "); //wdt_reset(); Serial.println("Reseted Watchdog"); userName = getName(msg); ackFlag_1 = 1; ackFlag = 1; } else if ((msg.indexOf("Check")>0)) { // detachInterrupt(CountPulses); Serial.println("Status Test MSG Received --------"); userName = getName(msg); statusAck = 1; } else if ((msg.indexOf("Terminate") > 0)) { // detachInterrupt(CountPulses); userName = getName(msg); Serial.print("Terminated all notification until next event by "); //Serial.println(userName); // wdt_reset(); Serial.println("Reseted Watchdog"); terminate_flag_1 = 1; terminate_flag = 1; } else{ Serial.println("Not a admin commend "); } }